From 822e48f762b27ca997c49cd3e53daf4696f22037 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Thu, 6 Feb 2025 20:56:47 +0900 Subject: [PATCH] =?UTF-8?q?CLAP-308=20HotFix:=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/inbound/web/task/CancelTaskController.java | 7 ++++--- .../application/port/inbound/task/CancelTaskUsecase.java | 2 +- .../application/service/task/CancelTaskService.java | 8 ++++++-- src/main/java/clap/server/domain/model/task/Task.java | 9 +++++++-- .../java/clap/server/exception/code/TaskErrorCode.java | 4 ++-- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/clap/server/adapter/inbound/web/task/CancelTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/CancelTaskController.java index 5504860b..6604b3f6 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/CancelTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/CancelTaskController.java @@ -1,5 +1,6 @@ package clap.server.adapter.inbound.web.task; +import clap.server.adapter.inbound.security.service.SecurityUserDetails; import clap.server.application.port.inbound.task.CancelTaskUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; @@ -18,9 +19,9 @@ public class CancelTaskController { private final CancelTaskUsecase cancelTaskUsecase; @Operation(summary = "작업 취소") - @Secured("ROLE_USER") + @Secured({"ROLE_USER","ROLE_MANAGER"}) @PatchMapping("/{taskId}/cancel") - public void cancelTask(@PathVariable Long taskId) { - cancelTaskUsecase.cancleTask(taskId); + public void cancelTask(@PathVariable Long taskId, SecurityUserDetails userDetails) { + cancelTaskUsecase.cancleTask(taskId, userDetails.getUserId()); } } diff --git a/src/main/java/clap/server/application/port/inbound/task/CancelTaskUsecase.java b/src/main/java/clap/server/application/port/inbound/task/CancelTaskUsecase.java index de1597b1..b48a46c6 100644 --- a/src/main/java/clap/server/application/port/inbound/task/CancelTaskUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/CancelTaskUsecase.java @@ -1,5 +1,5 @@ package clap.server.application.port.inbound.task; public interface CancelTaskUsecase { - void cancleTask(Long taskId); + void cancleTask(Long taskId, Long memberId); } diff --git a/src/main/java/clap/server/application/service/task/CancelTaskService.java b/src/main/java/clap/server/application/service/task/CancelTaskService.java index 9fefe764..397a8acf 100644 --- a/src/main/java/clap/server/application/service/task/CancelTaskService.java +++ b/src/main/java/clap/server/application/service/task/CancelTaskService.java @@ -5,17 +5,21 @@ import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.task.Task; import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Objects; @ApplicationService @RequiredArgsConstructor +@Transactional public class CancelTaskService implements CancelTaskUsecase { private final TaskService taskService; @Override - public void cancleTask(Long taskId) { + public void cancleTask(Long taskId, Long memberId) { Task task = taskService.findById(taskId); - task.cancelTask(); + task.cancelTask(memberId); taskService.upsert(task); } } 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 1a8985b3..bab637dc 100644 --- a/src/main/java/clap/server/domain/model/task/Task.java +++ b/src/main/java/clap/server/domain/model/task/Task.java @@ -4,6 +4,7 @@ import clap.server.domain.model.common.BaseTime; import clap.server.domain.model.member.Member; import clap.server.exception.ApplicationException; +import clap.server.exception.DomainException; import clap.server.exception.code.TaskErrorCode; import lombok.AccessLevel; import lombok.Getter; @@ -15,6 +16,7 @@ import java.util.Objects; import static clap.server.domain.policy.task.TaskPolicyConstants.DEFAULT_PROCESSOR_ORDER_GAP; +import static clap.server.exception.code.TaskErrorCode.NOT_A_REQUESTER; @Getter @SuperBuilder @@ -48,7 +50,7 @@ public static Task createTask(Member member, Category category, String title, St public void updateTask(Long requesterId, Category category, String title, String description) { if (!Objects.equals(requesterId, this.requester.getMemberId())) { - throw new ApplicationException(TaskErrorCode.NOT_A_REQUESTER); + throw new ApplicationException(NOT_A_REQUESTER); } this.category = category; this.title = title; @@ -103,7 +105,10 @@ public void updateProcessorOrder(long newProcessorOrder) { this.processorOrder = newProcessorOrder; } - public void cancelTask() { + public void cancelTask(Long requesterId) { + if (!Objects.equals(this.requester.getMemberId(), requesterId)) { + throw new DomainException(NOT_A_REQUESTER); + } this.taskStatus = TaskStatus.TERMINATED; this.finishedAt = LocalDateTime.now(); } diff --git a/src/main/java/clap/server/exception/code/TaskErrorCode.java b/src/main/java/clap/server/exception/code/TaskErrorCode.java index f5c551af..2b34f604 100644 --- a/src/main/java/clap/server/exception/code/TaskErrorCode.java +++ b/src/main/java/clap/server/exception/code/TaskErrorCode.java @@ -16,8 +16,8 @@ public enum TaskErrorCode implements BaseErrorCode { INVALID_TASK_ORDER(HttpStatus.INTERNAL_SERVER_ERROR, "TASK_007", "유효하지 않은 task order입니다."), INVALID_TASK_STATUS_TRANSITION(HttpStatus.BAD_REQUEST, "TASK_008", "유효하지 않은 작업 상태 전환입니다."), NOT_A_REVIEWER(HttpStatus.FORBIDDEN, "TASK_009", "작업 승인 및 수정 권한이 없습니다."), - NOT_A_REQUESTER(HttpStatus.FORBIDDEN, "TASK_009", "작업 수정 권한이 없습니다."), - TASK_STATUS_NOT_ALLOWED(HttpStatus.BAD_REQUEST, "TASK_010", "변경할 수 없는 작업 상태입니다. 다른 API를 사용해주세요") + NOT_A_REQUESTER(HttpStatus.FORBIDDEN, "TASK_010", "작업 수정 및 취소 권한이 없습니다."), + TASK_STATUS_NOT_ALLOWED(HttpStatus.BAD_REQUEST, "TASK_011", "변경할 수 없는 작업 상태입니다. 다른 API를 사용해주세요") ; private final HttpStatus httpStatus;