From e60a053a33b5aa4642c0e60d4fb76f32a99130e8 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Sun, 2 Feb 2025 11:26:33 +0900 Subject: [PATCH 1/3] =?UTF-8?q?CLAP-209=20Fix:=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20left=20jo?= =?UTF-8?q?in=20=EC=82=AC=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/task/TaskCustomRepositoryImpl.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java index a9efda36..ca429333 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java @@ -31,7 +31,7 @@ public class TaskCustomRepositoryImpl implements TaskCustomRepository { public Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { BooleanBuilder builder = createFilter(filterTaskListRequest); if (!filterTaskListRequest.nickName().isEmpty()) { - builder.and(taskEntity.processor.nickname.eq(filterTaskListRequest.nickName())); + builder.and(taskEntity.processor.nickname.contains(filterTaskListRequest.nickName())); } builder.and(taskEntity.requester.memberId.eq(requesterId)); @@ -42,7 +42,7 @@ public Page findTasksRequestedByUser(Long requesterId, Pageable page public Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { BooleanBuilder builder = createFilter(filterTaskListRequest); if (!filterTaskListRequest.nickName().isEmpty()) { - builder.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName())); + builder.and(taskEntity.requester.nickname.contains(filterTaskListRequest.nickName())); } builder.and(taskEntity.processor.memberId.eq(processorId)); @@ -53,7 +53,7 @@ public Page findTasksAssignedByManager(Long processorId, Pageable pa public Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) { BooleanBuilder builder = createFilter(filterTaskListRequest); if (!filterTaskListRequest.nickName().isEmpty()) { - builder.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName())); + builder.and(taskEntity.requester.nickname.contains(filterTaskListRequest.nickName())); } builder.and(taskEntity.taskStatus.eq(TaskStatus.REQUESTED)); return getTasksPage(pageable, builder, filterTaskListRequest.sortBy(), filterTaskListRequest.sortDirection()); @@ -64,8 +64,8 @@ public Page findAllTasks(Pageable pageable, FilterTaskListRequest fi BooleanBuilder builder = createFilter(filterTaskListRequest); if (!filterTaskListRequest.nickName().isEmpty()) { builder.and( - taskEntity.requester.nickname.eq(filterTaskListRequest.nickName()) - .or(taskEntity.processor.nickname.eq(filterTaskListRequest.nickName())) + taskEntity.requester.nickname.contains(filterTaskListRequest.nickName()) + .or(taskEntity.processor.nickname.contains(filterTaskListRequest.nickName())) ); } return getTasksPage(pageable, builder, filterTaskListRequest.sortBy(), filterTaskListRequest.sortDirection()); @@ -137,6 +137,8 @@ private Page getTasksPage(Pageable pageable, BooleanBuilder builder, List result = queryFactory .selectFrom(taskEntity) + .leftJoin(taskEntity.processor).fetchJoin() + .leftJoin(taskEntity.requester).fetchJoin() .where(builder) .orderBy(orderSpecifier) .offset(pageable.getOffset()) @@ -144,6 +146,8 @@ private Page getTasksPage(Pageable pageable, BooleanBuilder builder, .fetch(); long total = queryFactory .selectFrom(taskEntity) + .leftJoin(taskEntity.processor).fetchJoin() + .leftJoin(taskEntity.requester).fetchJoin() .where(builder) .fetch().size(); return new PageImpl<>(result, pageable, total); From 56637ef0bb3c74910ce6feca8444aef0a72d0138 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Sun, 2 Feb 2025 12:00:03 +0900 Subject: [PATCH 2/3] =?UTF-8?q?CLAP-209=20Refactor:=20persistence=20adapte?= =?UTF-8?q?r=EB=A1=9C=EB=B6=80=ED=84=B0=20dto=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20=EA=B3=84=EC=B8=B5=EC=9C=BC=EB=A1=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistense/TaskPersistenceAdapter.java | 20 ++++++++----------- .../port/outbound/task/LoadTaskPort.java | 8 ++++---- .../service/task/FindTaskListService.java | 19 +++++++++--------- .../service/task/FindTaskListServiceTest.java | 13 ++++++++---- 4 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java index 91149156..27611395 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java @@ -47,24 +47,21 @@ public Optional findById(Long id) { } @Override - public Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { - Page taskList = taskRepository.findTasksRequestedByUser(requesterId, pageable, filterTaskListRequest) + public Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { + return taskRepository.findTasksRequestedByUser(requesterId, pageable, filterTaskListRequest) .map(taskPersistenceMapper::toDomain); - return taskList.map(TaskMapper::toFilterRequestedTasksResponse); } @Override - public Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { - Page taskList = taskRepository.findTasksAssignedByManager(processorId, pageable, filterTaskListRequest) + public Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { + return taskRepository.findTasksAssignedByManager(processorId, pageable, filterTaskListRequest) .map(taskPersistenceMapper::toDomain); - return taskList.map(TaskMapper::toFilterAssignedTaskListResponse); } @Override - public Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) { - Page taskList = taskRepository.findPendingApprovalTasks(pageable, filterTaskListRequest) + public Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) { + return taskRepository.findPendingApprovalTasks(pageable, filterTaskListRequest) .map(taskPersistenceMapper::toDomain); - return taskList.map(TaskMapper::toFilterPendingApprovalTasksResponse); } @Override @@ -86,10 +83,9 @@ public List findYesterdayTaskByDate(LocalDateTime now) { } @Override - public Page findAllTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) { - Page taskList = taskRepository.findAllTasks(pageable, filterTaskListRequest) + public Page findAllTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) { + return taskRepository.findAllTasks(pageable, filterTaskListRequest) .map(taskPersistenceMapper::toDomain); - return taskList.map(TaskMapper::toFilterAllTasksResponse); } @Override diff --git a/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java b/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java index f400e726..cc4fd71c 100644 --- a/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java +++ b/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java @@ -21,13 +21,13 @@ public interface LoadTaskPort { List findYesterdayTaskByDate(LocalDateTime now); - Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); + Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); - Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); + Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); - Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest); + Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest); - Page findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); + Page findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); Slice findByProcessorAndStatus(Long processorId, List statuses, LocalDateTime untilDate, Pageable pageable); diff --git a/src/main/java/clap/server/application/service/task/FindTaskListService.java b/src/main/java/clap/server/application/service/task/FindTaskListService.java index 49da4e92..37a9b069 100644 --- a/src/main/java/clap/server/application/service/task/FindTaskListService.java +++ b/src/main/java/clap/server/application/service/task/FindTaskListService.java @@ -3,6 +3,7 @@ import clap.server.adapter.inbound.web.dto.common.PageResponse; import clap.server.adapter.inbound.web.dto.task.*; +import clap.server.application.mapper.TaskMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.task.FindTaskListUsecase; @@ -11,13 +12,13 @@ import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; +import clap.server.domain.model.task.Task; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.transaction.annotation.Transactional; - @ApplicationService @RequiredArgsConstructor @Transactional(readOnly = true) @@ -30,28 +31,28 @@ public class FindTaskListService implements FindTaskListUsecase { @Override public PageResponse findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) { Member requester = memberService.findActiveMember(requesterId); - Page filterRequestedTasksResponses = loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest); - return PageResponse.from(filterRequestedTasksResponses); + return PageResponse.from(loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest) + .map(TaskMapper::toFilterRequestedTasksResponse)); } @Override public PageResponse findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest) { Member processor = memberService.findActiveMember(processorId); - Page filterAssignedTaskListResponses = loadTaskPort.findTasksAssignedByManager(processor.getMemberId(), pageable, findTaskListRequest); - return PageResponse.from(filterAssignedTaskListResponses); + return PageResponse.from(loadTaskPort.findTasksAssignedByManager(processor.getMemberId(), pageable, findTaskListRequest) + .map(TaskMapper::toFilterAssignedTaskListResponse)); } @Override public PageResponse findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { memberService.findActiveMember(managerId); - Page filterPendingApprovalResponses = loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest); - return PageResponse.from(filterPendingApprovalResponses); + return PageResponse.from(loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest) + .map(TaskMapper::toFilterPendingApprovalTasksResponse)); } @Override public PageResponse findAllTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { memberService.findActiveMember(managerId); - Page filterAllTasksResponses = loadTaskPort.findAllTasks(pageable, filterTaskListRequest); - return PageResponse.from(filterAllTasksResponses); + return PageResponse.from(loadTaskPort.findAllTasks(pageable, filterTaskListRequest) + .map(TaskMapper::toFilterAllTasksResponse)); } } diff --git a/src/test/java/clap/server/application/service/task/FindTaskListServiceTest.java b/src/test/java/clap/server/application/service/task/FindTaskListServiceTest.java index 5029e626..a86136b8 100644 --- a/src/test/java/clap/server/application/service/task/FindTaskListServiceTest.java +++ b/src/test/java/clap/server/application/service/task/FindTaskListServiceTest.java @@ -3,6 +3,7 @@ import clap.server.adapter.inbound.web.dto.common.PageResponse; import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse; +import clap.server.application.mapper.TaskMapper; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.task.LoadTaskPort; import org.junit.jupiter.api.BeforeEach; @@ -21,6 +22,8 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -36,7 +39,8 @@ class FindTaskListServiceTest { private FilterTaskListRequest filterTaskListRequest; private Pageable pageable; - private Page expectedResponse; + private PageResponse expectedResponse; + private Page pageResponse; @BeforeEach void setUp() { @@ -54,7 +58,9 @@ void setUp() { 2L, "TC002", LocalDateTime.of(2025, 1, 15, 14, 30), "메인 카테고리2", "서브 카테고리2", "다른 작업 제목", "john.doe" ); - expectedResponse = new PageImpl<>(List.of(response, response2), pageable, 1); + pageResponse = new PageImpl<>(List.of(response, response2), pageable, 2); + expectedResponse = PageResponse.from(pageResponse); + } @Test @@ -62,9 +68,8 @@ void setUp() { void findPendingApprovalTasks_ReturnFilteredTasks() { // given Long managerId = 1L; - when(loadTaskPort.findPendingApprovalTasks(pageable, filterTaskListRequest)) + when(findTaskListService.findPendingApprovalTasks(managerId, eq(pageable), eq(filterTaskListRequest))) .thenReturn(expectedResponse); - // when PageResponse result = findTaskListService.findPendingApprovalTasks(managerId, pageable, filterTaskListRequest); From 255305066d8c6a9c9e3ee9ff8832956f8d9e1aee Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Sun, 2 Feb 2025 12:08:54 +0900 Subject: [PATCH 3/3] =?UTF-8?q?CLAP-209=20Refactor:=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=EB=B3=84=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EA=B5=AC?= =?UTF-8?q?=EB=B6=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inbound/web/comment/CommandCommentController.java | 2 +- .../adapter/inbound/web/comment/PostCommentController.java | 2 +- .../adapter/inbound/web/label/FindLabelController.java | 2 +- .../clap/server/adapter/inbound/web/log/LogController.java | 7 ++++++- .../adapter/inbound/web/task/ManagementTaskController.java | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java b/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java index e3768092..6ddd1f06 100644 --- a/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java +++ b/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java @@ -13,7 +13,7 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; -@Tag(name = "02. Task", description = "작업 생성/수정 API") +@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API") @WebAdapter @RestController @RequiredArgsConstructor diff --git a/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java b/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java index d269da51..af7db1d6 100644 --- a/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java +++ b/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java @@ -17,7 +17,7 @@ import java.util.List; -@Tag(name = "02. Task", description = "작업 생성/수정 API") +@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API") @WebAdapter @RestController @RequiredArgsConstructor diff --git a/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java b/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java index 809de982..40761571 100644 --- a/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java +++ b/src/main/java/clap/server/adapter/inbound/web/label/FindLabelController.java @@ -22,7 +22,7 @@ import java.util.List; -@Tag(name = "02. Task[검토자]") +@Tag(name = "02. Task [검토자]") @WebAdapter @RestController @RequiredArgsConstructor diff --git a/src/main/java/clap/server/adapter/inbound/web/log/LogController.java b/src/main/java/clap/server/adapter/inbound/web/log/LogController.java index 66ba981d..fb2a8495 100644 --- a/src/main/java/clap/server/adapter/inbound/web/log/LogController.java +++ b/src/main/java/clap/server/adapter/inbound/web/log/LogController.java @@ -7,6 +7,8 @@ import clap.server.adapter.inbound.web.dto.log.MemberLogResponse; import clap.server.application.port.inbound.log.FindApiLogsUsecase; import clap.server.common.annotation.architecture.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -18,14 +20,16 @@ import java.util.List; +@Tag(name = "05. Admin") @WebAdapter @RestController -@RequestMapping("/api/logs") +@RequestMapping("/api/managements/logs") @RequiredArgsConstructor public class LogController { private final FindApiLogsUsecase findApiLogsUsecase; + @Operation(summary = "로그인 로그 목록 조회") @Secured({"ROLE_ADMIN"}) @GetMapping("/login") public ResponseEntity> getLoginAttempts( @@ -37,6 +41,7 @@ public ResponseEntity> getLoginAttempts( return ResponseEntity.ok(findApiLogsUsecase.filterAnonymousLogs(anonymousLogRequest, pageable)); } + @Operation(summary = "작업 로그 목록 조회") @Secured({"ROLE_ADMIN"}) @GetMapping("/general") public ResponseEntity> getApiCalls( diff --git a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java index 76f42dfd..d0ac4cb7 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java @@ -19,7 +19,7 @@ import java.util.List; -@Tag(name = "02. Task", description = "작업 생성/수정 API") +@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API") @WebAdapter @RestController @RequiredArgsConstructor