From d61a3ee2c572fe404229a37280bd6a417eb30247 Mon Sep 17 00:00:00 2001 From: leeuihyun Date: Thu, 19 Jun 2025 21:43:50 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix=20:=20API=20=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B3=80=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=9D=B8?= =?UTF-8?q?=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B9=84=EC=A6=88=EB=8B=88=EC=8A=A4=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95=20=ED=9B=84=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onederful/domain/task/service/TaskServiceTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) 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; From 1ac35062fc711f8402ca674c69102eb93d6fbf79 Mon Sep 17 00:00:00 2001 From: leeuihyun Date: Thu, 19 Jun 2025 21:44:35 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix=20:=20API=20=EC=9A=94=EA=B5=AC=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EC=9E=98=EB=AA=BB=20=EC=9E=91=EC=84=B1=EB=90=98?= =?UTF-8?q?=EC=96=B4=EC=9E=88=EB=8A=94=20=EB=B6=80=EB=B6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20API=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=EC=9D=80?= =?UTF-8?q?=20taskId=EA=B0=80=20=EC=9E=88=EC=A7=80=EB=A7=8C=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EB=84=A4=ED=8A=B8=EC=9B=8C=ED=81=AC=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=9D=80=20=EC=97=86=EC=9D=8C=20=EB=84=A4=ED=8A=B8?= =?UTF-8?q?=EC=9B=8C=ED=81=AC=20=EC=9A=94=EC=B2=AD=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EB=B3=80=EA=B2=BD=ED=95=98=EC=97=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/comment/controller/CommentController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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); From 546050729ae2db818834cc78534f864cdce07c36 Mon Sep 17 00:00:00 2001 From: leeuihyun Date: Thu, 19 Jun 2025 21:50:15 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor=20:=20Pagination=20=EC=9E=AC?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20=ED=81=B4=EB=9E=98=EC=8A=A4=20DTO=EB=A1=9C?= =?UTF-8?q?=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/log/controller/LogController.java | 70 ++++++++--------- .../domain/log/dto/LogsResponse.java | 17 ----- .../domain/log/service/LogService.java | 76 +++++++++---------- 3 files changed, 73 insertions(+), 90 deletions(-) delete mode 100644 src/main/java/com/example/onederful/domain/log/dto/LogsResponse.java 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