Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ public ResponseEntity<ApiResponseDto> findCommentByContent(


// 댓글 삭제
@DeleteMapping("/tasks/{task_id}/comments/{comment_id}")
public ResponseEntity<ApiResponseDto> deleteComment(@PathVariable Long task_id,
@DeleteMapping("/comments/{comment_id}")
public ResponseEntity<ApiResponseDto> deleteComment(
@PathVariable Long comment_id) {

commentService.deleteComment(comment_id);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.example.onederful.domain.log.controller;

import com.example.onederful.common.ApiResponseDto;
import com.example.onederful.common.ListResponse;
import com.example.onederful.domain.log.dto.LogResponse;
import com.example.onederful.domain.log.service.LogService;
import java.time.LocalDate;

import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
Expand All @@ -11,42 +15,38 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.example.onederful.common.ApiResponseDto;
import com.example.onederful.domain.log.dto.LogsResponse;
import com.example.onederful.domain.log.service.LogService;

import lombok.RequiredArgsConstructor;

@RestController
@RequiredArgsConstructor
public class LogController {

private final LogService logService;

/**
* 활동 로그 조회
*
* 검색 조건:
* @param userId 유저 아이디 (필수 N)
* @param activity 활동 유형 (필수 N)
* @param targetId 대상 ID (필수 N)
* @param start 시작일 (필수 N)
* @param end 종료일 (필수 N)
* @param pageable 페이징을 위한 page, size, sort (필수 N)
* @return 조회된 활동 로그
*/
@GetMapping("/api/activities")
public ResponseEntity<ApiResponseDto> getLog(
@RequestParam(required = false) Long userId,
@RequestParam(required = false) String activity,
@RequestParam(required = false) Long targetId,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate start,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
@PageableDefault(page = 0, size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable
) {

LogsResponse response = logService.findLog(userId, activity, targetId, start, end, pageable);

return ResponseEntity.ok(ApiResponseDto.success("활동 로그 리스트 조회에 성공하였습니다.", response));
}
private final LogService logService;

/**
* 활동 로그 조회
* <p>
* 검색 조건:
*
* @param userId 유저 아이디 (필수 N)
* @param activity 활동 유형 (필수 N)
* @param targetId 대상 ID (필수 N)
* @param start 시작일 (필수 N)
* @param end 종료일 (필수 N)
* @param pageable 페이징을 위한 page, size, sort (필수 N)
* @return 조회된 활동 로그
*/
@GetMapping("/api/activities")
public ResponseEntity<ApiResponseDto> getLog(
@RequestParam(required = false) Long userId,
@RequestParam(required = false) String activity,
@RequestParam(required = false) Long targetId,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate start,
@RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end,
@PageableDefault(page = 0, size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable
) {

ListResponse<LogResponse> response = logService.findLog(userId, activity, targetId, start,
end, pageable);

return ResponseEntity.ok(ApiResponseDto.success("활동 로그 리스트 조회에 성공하였습니다.", response));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.example.onederful.domain.log.service;

import com.example.onederful.common.ListResponse;
import com.example.onederful.domain.comment.dto.CommentResponseDataDto;
import com.example.onederful.domain.log.dto.LogResponse;
import com.example.onederful.domain.log.dto.LogsResponse;
import com.example.onederful.domain.log.entity.Log;
import com.example.onederful.domain.log.enums.Activity;
import com.example.onederful.domain.log.enums.Method;
Expand Down Expand Up @@ -33,7 +33,7 @@ public class LogService {
private final JwtUtil jwtUtil;

// log 조회 메서드
public LogsResponse findLog(
public ListResponse<LogResponse> findLog(
Long userId, String activityStr, Long targetId,
LocalDate start, LocalDate end, Pageable pageable) {

Expand All @@ -56,48 +56,48 @@ public LogsResponse findLog(

Page<Log> logs = logRepository.findAll(spec, pageable);

return LogsResponse.builder()
return ListResponse.<LogResponse>builder()
.content(logs.getContent().stream().map(LogResponse::of).collect(Collectors.toList()))
.totalElements(logs.getTotalElements())
.size((long) logs.getSize())
.number((long) logs.getNumber())
.totalPages((long) logs.getTotalPages())
.size(logs.getSize())
.number(logs.getNumber())
.totalPages(logs.getTotalPages())
.build();
}

// 로그인 시 로그 기록
@Transactional
public void saveLoginLog(String ip, Method method, String url, Object result) {
// userId
Long userId = null;
if (result instanceof Tokeninfo) {
String token = ((Tokeninfo) result).getToken();
userId = jwtUtil.extractAllClaims(token).get("id", Long.class);
}

// 현재 유저 조회
User user = userRepositry.findById(userId).orElseThrow(
() -> new CustomException(ErrorCode.UNAUTHORIZED)
);

// 활동 유형
Activity activity = Activity.USER_LOGGED_IN;

// 대상 id
Long targetId = userId;

// 로그 DB에 저장
Log log = Log.builder()
.user(user)
.activity(activity)
.ipAddress(ip)
.method(method)
.targetId(targetId)
.requestUrl(url)
.build();

logRepository.save(log);
}
@Transactional
public void saveLoginLog(String ip, Method method, String url, Object result) {
// userId
Long userId = null;
if (result instanceof Tokeninfo) {
String token = ((Tokeninfo) result).getToken();
userId = jwtUtil.extractAllClaims(token).get("id", Long.class);
}

// 현재 유저 조회
User user = userRepositry.findById(userId).orElseThrow(
() -> new CustomException(ErrorCode.UNAUTHORIZED)
);

// 활동 유형
Activity activity = Activity.USER_LOGGED_IN;

// 대상 id
Long targetId = userId;

// 로그 DB에 저장
Log log = Log.builder()
.user(user)
.activity(activity)
.ipAddress(ip)
.method(method)
.targetId(targetId)
.requestUrl(url)
.build();

logRepository.save(log);
}

// 생성, 수정, 삭제 시 로그 기록
@Transactional
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import com.example.onederful.security.JwtUtil;
import jakarta.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Assertions;
Expand Down Expand Up @@ -58,7 +57,7 @@ public class TaskServiceTest {
.description("description")
.priority(Priority.LOW)
.assigneeId(1L)
.dueDate(OffsetDateTime.parse("2027-04-02T23:59:59Z"))
.dueDate(LocalDateTime.of(2027, 4, 2, 23, 59, 59))
.build();

HttpServletRequest httpServletRequest = new MockHttpServletRequest();
Expand Down Expand Up @@ -91,7 +90,7 @@ public class TaskServiceTest {
.assignee(manager)
.user(me)
.status(ProcessStatus.TODO)
.dueDate(request.getDueDate().toLocalDateTime())
.dueDate(request.getDueDate())
.build();

ReflectionTestUtils.setField(task, "createdAt", LocalDateTime.now());
Expand Down Expand Up @@ -298,7 +297,7 @@ public class TaskServiceTest {
.priority(Priority.LOW)
.assigneeId(1L)
.status(ProcessStatus.IN_PROGRESS)
.dueDate(OffsetDateTime.parse("2027-04-02T23:59:59Z"))
.dueDate(LocalDateTime.of(2027, 4, 2, 23, 59, 59))
.build();

Long userId = 1L;
Expand Down