From b492c46b700cbb1ca2bd9c019607ea1d4770e64c Mon Sep 17 00:00:00 2001 From: nano-mm Date: Wed, 29 Jan 2025 04:45:59 +0900 Subject: [PATCH 1/2] =?UTF-8?q?CLAP-69=20Feat:=20=EB=82=B4=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=A1=B0=ED=9A=8C=20API=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task/FilterAssignedTaskListResponse.java | 19 +++++++++++++++++ .../persistense/TaskPersistenceAdapter.java | 12 +++++++---- .../repository/task/TaskCustomRepository.java | 1 + .../task/TaskCustomRepositoryImpl.java | 11 ++++++++++ .../application/Task/FindTaskListService.java | 11 ++++++---- .../server/application/mapper/TaskMapper.java | 14 ++++++++++++- .../inbound/task/FindTaskListUsecase.java | 7 +++---- .../port/outbound/task/LoadTaskPort.java | 7 +++---- src/test/resources/application.yml | 21 +------------------ 9 files changed, 66 insertions(+), 37 deletions(-) create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/FilterAssignedTaskListResponse.java diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterAssignedTaskListResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterAssignedTaskListResponse.java new file mode 100644 index 00000000..d370e8d8 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterAssignedTaskListResponse.java @@ -0,0 +1,19 @@ +package clap.server.adapter.inbound.web.dto.task; + +import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; + +import java.time.LocalDateTime; + +public record FilterAssignedTaskListResponse( + Long taskId, + String taskCode, + LocalDateTime requestedAt, + String mainCategoryName, + String categoryName, + String title, + String requesterName, + TaskStatus taskStatus, + LocalDateTime finishedAt +) {} + + 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 c0ea7eea..8e31b52f 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java @@ -1,9 +1,6 @@ package clap.server.adapter.outbound.persistense; -import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; -import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse; +import clap.server.adapter.inbound.web.dto.task.*; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper; @@ -50,6 +47,13 @@ public Page findTasksRequestedByUser(Long requeste return taskList.map(TaskMapper::toFilterRequestedTasksResponse); } + @Override + public Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { + Page taskList = 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) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java index d7f5902d..fc974623 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java @@ -10,4 +10,5 @@ public interface TaskCustomRepository { Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); Page findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); + Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest); } 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 29b44a93..a95c2f0a 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 @@ -36,6 +36,17 @@ public Page findTasksRequestedByUser(Long requesterId, Pageable page return getTasksPage(pageable, whereClause, filterTaskListRequest.orderRequest().sortBy(), filterTaskListRequest.orderRequest().sortDirection()); } + @Override + public Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { + BooleanBuilder whereClause = createFilter(filterTaskListRequest); + if (!filterTaskListRequest.nickName().isEmpty()) { + whereClause.and(taskEntity.requester.nickname.eq(filterTaskListRequest.nickName())); + } + whereClause.and(taskEntity.processor.memberId.eq(processorId)); + + return getTasksPage(pageable, whereClause, filterTaskListRequest.orderRequest().sortBy(), filterTaskListRequest.orderRequest().sortDirection()); + } + @Override public Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest) { BooleanBuilder whereClause = createFilter(filterTaskListRequest); diff --git a/src/main/java/clap/server/application/Task/FindTaskListService.java b/src/main/java/clap/server/application/Task/FindTaskListService.java index 78420693..963c0759 100644 --- a/src/main/java/clap/server/application/Task/FindTaskListService.java +++ b/src/main/java/clap/server/application/Task/FindTaskListService.java @@ -1,10 +1,7 @@ package clap.server.application.Task; -import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; -import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse; +import clap.server.adapter.inbound.web.dto.task.*; -import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.task.FindTaskListUsecase; @@ -35,6 +32,12 @@ public Page findTasksRequestedByUser(Long requeste return loadTaskPort.findTasksRequestedByUser(requester.getMemberId(), pageable, findTaskListRequest); } + @Override + public Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest findTaskListRequest) { + Member processor = memberService.findActiveMember(processorId); + return loadTaskPort.findTasksAssignedByManager(processor.getMemberId(), pageable, findTaskListRequest); + } + @Override public Page findPendingApprovalTasks(Long managerId, Pageable pageable, FilterTaskListRequest filterTaskListRequest) { memberService.findActiveMember(managerId); diff --git a/src/main/java/clap/server/application/mapper/TaskMapper.java b/src/main/java/clap/server/application/mapper/TaskMapper.java index b5025465..3cfce29a 100644 --- a/src/main/java/clap/server/application/mapper/TaskMapper.java +++ b/src/main/java/clap/server/application/mapper/TaskMapper.java @@ -42,7 +42,19 @@ public static FilterRequestedTasksResponse toFilterRequestedTasksResponse(Task t task.getFinishedAt() != null ? task.getFinishedAt() : null ); } - + public static FilterAssignedTaskListResponse toFilterAssignedTaskListResponse(Task task) { + return new FilterAssignedTaskListResponse( + task.getTaskId(), + task.getTaskCode(), + task.getUpdatedAt(), + task.getCategory().getMainCategory().getName(), + task.getCategory().getName(), + task.getTitle(), + task.getRequester() != null ? task.getRequester().getMemberInfo().getNickname() : "", + task.getTaskStatus(), + task.getFinishedAt() != null ? task.getFinishedAt() : null + ); + } public static FilterPendingApprovalResponse toFilterPendingApprovalTasksResponse(Task task) { return new FilterPendingApprovalResponse( task.getTaskId(), diff --git a/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java b/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java index 903c6563..6700b5bc 100644 --- a/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java @@ -1,15 +1,14 @@ package clap.server.application.port.inbound.task; -import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; -import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse; +import clap.server.adapter.inbound.web.dto.task.*; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; public interface FindTaskListUsecase { Page findTasksRequestedByUser(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest); + Page findTasksAssignedByManager(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest); + Page findPendingApprovalTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); Page findAllTasks(Long userId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); 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 ff18bf14..e6a37474 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 @@ -1,9 +1,6 @@ package clap.server.application.port.outbound.task; -import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; -import clap.server.adapter.inbound.web.dto.task.FilterRequestedTasksResponse; -import clap.server.adapter.inbound.web.dto.task.FilterPendingApprovalResponse; +import clap.server.adapter.inbound.web.dto.task.*; import clap.server.adapter.inbound.web.dto.task.FilterAllTasksResponse; import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; @@ -24,6 +21,8 @@ public interface LoadTaskPort { Page findTasksRequestedByUser(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); + Page findTasksAssignedByManager(Long processorId, Pageable pageable, FilterTaskListRequest filterTaskListRequest); + Page findPendingApprovalTasks(Pageable pageable, FilterTaskListRequest filterTaskListRequest); Page findAllTasks(Pageable pageable, FilterTaskListRequest findTaskListRequest); diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index b10d6c61..a35a6e16 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -14,18 +14,6 @@ spring: hibernate: ddl-auto: create - mail: - host: smtp.gmail.com - port: 587 - username: leegd120@gmail.com - password: znlictzarqurxlla - properties: - mail: - smtp: - auth: true - starttls: - enable: true - testcontainers: beans: startup: parallel @@ -36,7 +24,7 @@ server: web: domain: - local: 127.0.0.1:3O00 + local: 127.0.0.1:3000 service: 127.0.0.1:3000 swagger: @@ -58,11 +46,4 @@ password: length: 12 characters: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+ -kakaowork: - url: https://api.kakaowork.com/v1/messages.send_by_email - auth: Bearer 1b01becc.a7f10da76d2e4038948771107cfe5c1d - -agit: - url: https://agit.io/webhook/a342181d-fb18-4eb0-a99a-30f4fb5b14b1 - From 714bb896e41c6d2306b51fc9a4c079a7558c8c7d Mon Sep 17 00:00:00 2001 From: nano-mm Date: Thu, 30 Jan 2025 03:40:18 +0900 Subject: [PATCH 2/2] =?UTF-8?q?CLAP-69=20=20fix:=20=EB=82=B4=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=A1=B0=ED=9A=8C=20API=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inbound/web/task/FindTaskController.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java index f7819beb..fff21259 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java @@ -37,6 +37,7 @@ public ResponseEntity> findTasksRequestedByUs Pageable pageable = PageRequest.of(page, pageSize); return ResponseEntity.ok(taskListUsecase.findTasksRequestedByUser(userInfo.getUserId(), pageable, filterTaskListRequest)); } + @Operation(summary = "요청한 작업 상세 조회") @Secured({"ROLE_USER", "ROLE_MANAGER"}) @GetMapping("/requests/details/{taskId}") @@ -46,6 +47,18 @@ public ResponseEntity findRequestedTaskDetails( return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(userInfo.getUserId(), taskId)); } + @Operation(summary = "할당된 내 작업 목록 조회") + @Secured({"ROLE_MANAGER"}) + @GetMapping("/assigned") + public ResponseEntity> findTasksAssignedByManager( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "20") int pageSize, + @ModelAttribute FilterTaskListRequest filterTaskListRequest, + @AuthenticationPrincipal SecurityUserDetails userInfo){ + Pageable pageable = PageRequest.of(page, pageSize); + return ResponseEntity.ok(taskListUsecase.findTasksAssignedByManager(userInfo.getUserId(), pageable, filterTaskListRequest)); + } + @Operation(summary = "승인 대기 중인 요청 목록 조회") @Secured({"ROLE_MANAGER"}) @GetMapping("/requests/pending")