From 48d226d8e29dc4258a4f41701c7eedb34588705f Mon Sep 17 00:00:00 2001 From: andrew Date: Mon, 27 Jan 2025 14:59:01 +0900 Subject: [PATCH 1/4] =?UTF-8?q?CLAP-154=20Feature:=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/dto/task/UpdateTaskStateRequest.java | 14 ++++++++++++++ .../inbound/web/task/ManagementTaskController.java | 11 +++++++++++ .../server/application/Task/UpdateTaskService.java | 12 ++++++++++++ .../port/inbound/task/UpdateTaskUsecase.java | 2 ++ .../java/clap/server/domain/model/task/Task.java | 4 ++++ 5 files changed, 43 insertions(+) create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java new file mode 100644 index 00000000..fc3dd8c2 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java @@ -0,0 +1,14 @@ +package clap.server.adapter.inbound.web.dto.task; + +import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; + +@Schema(description = "작업 상태 변경 요청") +public record UpdateTaskStateRequest( + + @Schema(description = "변경하고 싶은 작업 상태", example = "COMPLETED") + @NotNull + TaskStatus taskStatus +) { +} 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 7a4c0f19..3c1d3ff5 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 @@ -54,6 +54,17 @@ public ResponseEntity updateTask( return ResponseEntity.ok(updateTaskUsecase.updateTask(userInfo.getUserId(), taskId, updateTaskRequest, attachments)); } + @Operation(summary = "작업 상태 변경") + @Secured({"ROLE_MANGER"}) + @PatchMapping("/state/{taskId}") + public ResponseEntity updateTaskState( + @PathVariable @NotNull Long taskId, + @AuthenticationPrincipal SecurityUserDetails userInfo, + @RequestBody UpdateTaskStateRequest updateTaskStateRequest) { + + return ResponseEntity.ok(updateTaskUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStateRequest)); + } + @Operation(summary = "작업 승인") @Secured({"ROLE_MANAGER"}) @PostMapping("/approval/{taskId}") diff --git a/src/main/java/clap/server/application/Task/UpdateTaskService.java b/src/main/java/clap/server/application/Task/UpdateTaskService.java index e25938ac..e6445a03 100644 --- a/src/main/java/clap/server/application/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/Task/UpdateTaskService.java @@ -2,6 +2,7 @@ import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; +import clap.server.adapter.inbound.web.dto.task.UpdateTaskStateRequest; import clap.server.adapter.outbound.infrastructure.s3.S3UploadAdapter; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import clap.server.application.mapper.AttachmentMapper; @@ -62,6 +63,17 @@ public UpdateTaskResponse updateTask(Long requesterId, Long taskId, UpdateTaskRe return TaskMapper.toUpdateTaskResponse(updatedTask); } + @Override + public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest) { + memberService.findActiveMember(memberId); + Task task = taskService.findById(taskId); + task.updateTaskStatus(updateTaskStateRequest.taskStatus()); + Task updateTask = commandTaskPort.save(task); + return TaskMapper.toUpdateTaskResponse(updateTask); + + // TODO : 알림 생성 로직 및 푸시 알림 로직 추가 + } + private void updateAttachments(List attachmentIdsToDelete, List files, Task task) { validateAttachments(attachmentIdsToDelete, task); commandAttachmentPort.deleteByIds(attachmentIdsToDelete); diff --git a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java index ee3f6f98..7f39861e 100644 --- a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java @@ -3,10 +3,12 @@ import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; +import clap.server.adapter.inbound.web.dto.task.UpdateTaskStateRequest; import org.springframework.web.multipart.MultipartFile; import java.util.List; public interface UpdateTaskUsecase { UpdateTaskResponse updateTask(Long memberId, Long taskId, UpdateTaskRequest updateTaskRequest, List files); + UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest); } diff --git a/src/main/java/clap/server/domain/model/task/Task.java b/src/main/java/clap/server/domain/model/task/Task.java index 1142fba0..99f27d75 100644 --- a/src/main/java/clap/server/domain/model/task/Task.java +++ b/src/main/java/clap/server/domain/model/task/Task.java @@ -50,6 +50,10 @@ public void updateTask(Category category, String title, String description) { this.taskCode = toTaskCode(category); } + public void updateTaskStatus(TaskStatus status) { + this.taskStatus = status; + } + public void approveTask(Member reviewer, Member processor, LocalDateTime dueDate, Category category, Label label) { this.reviewer = reviewer; this.processor = processor; From 39d481f6a447884134e4b37c17738d019287ac42 Mon Sep 17 00:00:00 2001 From: andrew Date: Mon, 27 Jan 2025 15:29:01 +0900 Subject: [PATCH 2/4] =?UTF-8?q?CLAP-154=20Fix:=20@Transactional=20?= =?UTF-8?q?=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20service=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EC=97=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/inbound/web/dto/task/UpdateTaskStateRequest.java | 2 +- .../java/clap/server/application/Task/UpdateTaskService.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java index fc3dd8c2..ae65bb0c 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java @@ -7,7 +7,7 @@ @Schema(description = "작업 상태 변경 요청") public record UpdateTaskStateRequest( - @Schema(description = "변경하고 싶은 작업 상태", example = "COMPLETED") + @Schema(description = "변경하고 싶은 작업 상태", example = "완료") @NotNull TaskStatus taskStatus ) { diff --git a/src/main/java/clap/server/application/Task/UpdateTaskService.java b/src/main/java/clap/server/application/Task/UpdateTaskService.java index e6445a03..be52fb8e 100644 --- a/src/main/java/clap/server/application/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/Task/UpdateTaskService.java @@ -64,6 +64,7 @@ public UpdateTaskResponse updateTask(Long requesterId, Long taskId, UpdateTaskRe } @Override + @Transactional public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest) { memberService.findActiveMember(memberId); Task task = taskService.findById(taskId); From f33e8b557fc97c38ca976afe6538175c6d9397cb Mon Sep 17 00:00:00 2001 From: andrew Date: Tue, 28 Jan 2025 03:15:52 +0900 Subject: [PATCH 3/4] =?UTF-8?q?CLAP-154=20Fix:=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=83=81=ED=83=9C/=EA=B5=AC=EB=B6=84=20UsceCase=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 --- .../inbound/web/task/ManagementTaskController.java | 4 +++- .../clap/server/application/Task/UpdateTaskService.java | 3 ++- .../port/inbound/task/UpdateTaskStatusUsecase.java | 8 ++++++++ .../application/port/inbound/task/UpdateTaskUsecase.java | 1 - 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 src/main/java/clap/server/application/port/inbound/task/UpdateTaskStatusUsecase.java 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 3c1d3ff5..2bf0e75b 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 @@ -4,6 +4,7 @@ import clap.server.adapter.inbound.web.dto.task.*; import clap.server.application.port.inbound.task.ApprovalTaskUsecase; import clap.server.application.port.inbound.task.CreateTaskUsecase; +import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase; import clap.server.application.port.inbound.task.UpdateTaskUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; @@ -30,6 +31,7 @@ public class ManagementTaskController { private final CreateTaskUsecase createTaskUsecase; private final UpdateTaskUsecase updateTaskUsecase; + private final UpdateTaskStatusUsecase updateTaskStatusUsecase; private final ApprovalTaskUsecase approvalTaskUsecase; @Operation(summary = "작업 요청 생성") @@ -62,7 +64,7 @@ public ResponseEntity updateTaskState( @AuthenticationPrincipal SecurityUserDetails userInfo, @RequestBody UpdateTaskStateRequest updateTaskStateRequest) { - return ResponseEntity.ok(updateTaskUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStateRequest)); + return ResponseEntity.ok(updateTaskStatusUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStateRequest)); } @Operation(summary = "작업 승인") diff --git a/src/main/java/clap/server/application/Task/UpdateTaskService.java b/src/main/java/clap/server/application/Task/UpdateTaskService.java index be52fb8e..d77a8eac 100644 --- a/src/main/java/clap/server/application/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/Task/UpdateTaskService.java @@ -10,6 +10,7 @@ import clap.server.application.port.inbound.domain.CategoryService; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.domain.TaskService; +import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase; import clap.server.application.port.inbound.task.UpdateTaskUsecase; import clap.server.application.port.outbound.task.CommandAttachmentPort; import clap.server.application.port.outbound.task.CommandTaskPort; @@ -35,7 +36,7 @@ @ApplicationService @RequiredArgsConstructor @Slf4j -public class UpdateTaskService implements UpdateTaskUsecase { +public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUsecase { private final MemberService memberService; private final CategoryService categoryService; diff --git a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskStatusUsecase.java b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskStatusUsecase.java new file mode 100644 index 00000000..bdd6b416 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskStatusUsecase.java @@ -0,0 +1,8 @@ +package clap.server.application.port.inbound.task; + +import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; +import clap.server.adapter.inbound.web.dto.task.UpdateTaskStateRequest; + +public interface UpdateTaskStatusUsecase { + UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest); +} diff --git a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java index 7f39861e..f1bbbe6a 100644 --- a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java @@ -10,5 +10,4 @@ public interface UpdateTaskUsecase { UpdateTaskResponse updateTask(Long memberId, Long taskId, UpdateTaskRequest updateTaskRequest, List files); - UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest); } From 04d40b28acf5f0bcdebf05e761be9720d4048fc6 Mon Sep 17 00:00:00 2001 From: andrew Date: Tue, 28 Jan 2025 03:18:52 +0900 Subject: [PATCH 4/4] CLAP-154 Fix: Merge Conflict --- src/main/java/clap/server/domain/model/task/Task.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/clap/server/domain/model/task/Task.java b/src/main/java/clap/server/domain/model/task/Task.java index 99f27d75..401caa38 100644 --- a/src/main/java/clap/server/domain/model/task/Task.java +++ b/src/main/java/clap/server/domain/model/task/Task.java @@ -25,7 +25,7 @@ public class Task extends BaseTime { private Category category; private Member requester; private TaskStatus taskStatus; - private int processorOrder; + private long processorOrder; private Member processor; private Label label; private Member reviewer; @@ -50,6 +50,12 @@ public void updateTask(Category category, String title, String description) { this.taskCode = toTaskCode(category); } + public void setInitialProcessorOrder() { + if(this.processor == null) { + this.processorOrder = this.taskId * 128L; + } + } + public void updateTaskStatus(TaskStatus status) { this.taskStatus = status; }