diff --git a/src/main/java/com/example/onederful/domain/comment/controller/CommentController.java b/src/main/java/com/example/onederful/domain/comment/controller/CommentController.java index 8fc942f..c2551f4 100644 --- a/src/main/java/com/example/onederful/domain/comment/controller/CommentController.java +++ b/src/main/java/com/example/onederful/domain/comment/controller/CommentController.java @@ -91,8 +91,8 @@ public ResponseEntity findCommentByContent( // 댓글 삭제 - @DeleteMapping("/tasks/{task_id}/comments/{comment_id}") - public ResponseEntity deleteComment(@PathVariable Long task_id, + @DeleteMapping("/comments/{comment_id}") + public ResponseEntity deleteComment( @PathVariable Long comment_id) { commentService.deleteComment(comment_id); diff --git a/src/main/java/com/example/onederful/domain/log/controller/LogController.java b/src/main/java/com/example/onederful/domain/log/controller/LogController.java index 76bf437..4ff49a3 100644 --- a/src/main/java/com/example/onederful/domain/log/controller/LogController.java +++ b/src/main/java/com/example/onederful/domain/log/controller/LogController.java @@ -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; @@ -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 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; + + /** + * 활동 로그 조회 + *

+ * 검색 조건: + * + * @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 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 response = logService.findLog(userId, activity, targetId, start, + end, pageable); + + return ResponseEntity.ok(ApiResponseDto.success("활동 로그 리스트 조회에 성공하였습니다.", response)); + } } diff --git a/src/main/java/com/example/onederful/domain/log/dto/LogsResponse.java b/src/main/java/com/example/onederful/domain/log/dto/LogsResponse.java deleted file mode 100644 index fc74102..0000000 --- a/src/main/java/com/example/onederful/domain/log/dto/LogsResponse.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.onederful.domain.log.dto; - -import java.util.List; - -import lombok.Builder; -import lombok.Getter; - -@Getter -@Builder -public class LogsResponse { - - private List content; - private Long totalElements; - private Long totalPages; - private Long size; - private Long number; -} diff --git a/src/main/java/com/example/onederful/domain/log/service/LogService.java b/src/main/java/com/example/onederful/domain/log/service/LogService.java index bf23d26..df2ce0b 100644 --- a/src/main/java/com/example/onederful/domain/log/service/LogService.java +++ b/src/main/java/com/example/onederful/domain/log/service/LogService.java @@ -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; @@ -33,7 +33,7 @@ public class LogService { private final JwtUtil jwtUtil; // log 조회 메서드 - public LogsResponse findLog( + public ListResponse findLog( Long userId, String activityStr, Long targetId, LocalDate start, LocalDate end, Pageable pageable) { @@ -56,48 +56,48 @@ public LogsResponse findLog( Page logs = logRepository.findAll(spec, pageable); - return LogsResponse.builder() + return ListResponse.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 diff --git a/src/test/java/com/example/onederful/domain/task/service/TaskServiceTest.java b/src/test/java/com/example/onederful/domain/task/service/TaskServiceTest.java index 7a822aa..9ed2995 100644 --- a/src/test/java/com/example/onederful/domain/task/service/TaskServiceTest.java +++ b/src/test/java/com/example/onederful/domain/task/service/TaskServiceTest.java @@ -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; @@ -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(); @@ -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()); @@ -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;