Skip to content

Commit bc382a8

Browse files
authored
Merge pull request #263 from TaskFlow-CLAP/CLAP-245
CLAP-245 작업 거부 / 종료 API 구현
2 parents 716d9f3 + 90fd9a2 commit bc382a8

File tree

19 files changed

+130
-50
lines changed

19 files changed

+130
-50
lines changed

src/main/java/clap/server/adapter/inbound/web/dto/history/response/FindTaskHistoryResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static record Details(
2424
) {}
2525

2626
public static record TaskDetails(
27-
String newValue
27+
String value
2828
) {}
2929

3030
public static record CommentDetails(

src/main/java/clap/server/adapter/inbound/web/dto/task/request/UpdateTaskStatusRequest.java

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@
44
import clap.server.adapter.inbound.web.dto.task.request.ApprovalTaskRequest;
55
import clap.server.adapter.inbound.web.dto.task.request.UpdateTaskLabelRequest;
66
import clap.server.adapter.inbound.web.dto.task.request.UpdateTaskProcessorRequest;
7-
import clap.server.adapter.inbound.web.dto.task.request.UpdateTaskStatusRequest;
87
import clap.server.adapter.inbound.web.dto.task.response.ApprovalTaskResponse;
98
import clap.server.adapter.inbound.web.dto.task.response.UpdateTaskResponse;
9+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
1010
import clap.server.application.port.inbound.task.ApprovalTaskUsecase;
1111
import clap.server.application.port.inbound.task.UpdateTaskLabelUsecase;
1212
import clap.server.application.port.inbound.task.UpdateTaskProcessorUsecase;
1313
import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase;
1414
import clap.server.common.annotation.architecture.WebAdapter;
1515
import io.swagger.v3.oas.annotations.Operation;
16+
import io.swagger.v3.oas.annotations.Parameter;
17+
import io.swagger.v3.oas.annotations.media.Schema;
1618
import io.swagger.v3.oas.annotations.tags.Tag;
1719
import jakarta.validation.Valid;
1820
import jakarta.validation.constraints.NotNull;
@@ -41,9 +43,11 @@ public class ChangeTaskController {
4143
public ResponseEntity<UpdateTaskResponse> updateTaskState(
4244
@PathVariable @NotNull Long taskId,
4345
@AuthenticationPrincipal SecurityUserDetails userInfo,
44-
@RequestBody UpdateTaskStatusRequest updateTaskStatusRequest) {
46+
@Parameter(description = "변경하고 싶은 작업 상태",
47+
schema = @Schema(allowableValues = {"IN_PROGRESS", "PENDING_COMPLETED", "COMPLETED"}))
48+
@RequestBody TaskStatus taskStatus) {
4549

46-
return ResponseEntity.ok(updateTaskStatusUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStatusRequest));
50+
return ResponseEntity.ok(updateTaskStatusUsecase.updateTaskStatus(userInfo.getUserId(), taskId, taskStatus));
4751
}
4852

4953
@Operation(summary = "작업 처리자 변경")
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package clap.server.adapter.inbound.web.task;
2+
3+
import clap.server.adapter.inbound.security.SecurityUserDetails;
4+
import clap.server.application.port.inbound.task.TerminateTaskUsecase;
5+
import clap.server.common.annotation.architecture.WebAdapter;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.media.Schema;
8+
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.security.access.annotation.Secured;
11+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
12+
import org.springframework.web.bind.annotation.*;
13+
14+
@Tag(name = "02. Task [거부 & 종료]")
15+
@WebAdapter
16+
@RestController
17+
@RequiredArgsConstructor
18+
@RequestMapping("/api/tasks")
19+
public class TerminateTaskController {
20+
private final TerminateTaskUsecase terminateTaskUsecase;
21+
22+
@Operation(summary = "작업 거부 및 종료")
23+
@Secured({"ROLE_MANAGER"})
24+
@PatchMapping("/{taskId}/terminate")
25+
public void terminateTask(@AuthenticationPrincipal SecurityUserDetails userInfo,
26+
@PathVariable Long taskId,
27+
@RequestBody @Schema(example = "스웨거에서는 따옴표를 떼고 보내주세요") String reason) {
28+
terminateTaskUsecase.terminateTask(userInfo.getUserId(), taskId, reason);
29+
}
30+
31+
}

src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/TaskHistoryType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public enum TaskHistoryType {
1010
COMMENT_FILE("댓글 첨부파일"),
1111
STATUS_SWITCHED("상태 전환"),
1212
PROCESSOR_ASSIGNED("처리자 할당"),
13-
PROCESSOR_CHANGED("처리자 변경");
13+
PROCESSOR_CHANGED("처리자 변경"),
14+
TASK_TERMINATED("작업 종료됨");
1415

1516
private final String description;
1617
}

src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static FindTaskHistoryResponse toFindTaskHistoryResponse(List<TaskHistory
2626
null,
2727
null
2828
);
29-
case STATUS_SWITCHED -> new FindTaskHistoryResponse.Details(
29+
case STATUS_SWITCHED, TASK_TERMINATED -> new FindTaskHistoryResponse.Details(
3030
new FindTaskHistoryResponse.TaskDetails(
3131
taskHistory.getTaskModificationInfo().getModifiedStatus()
3232
),

src/main/java/clap/server/application/port/inbound/domain/TaskService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package clap.server.application.port.inbound.domain;
22

3+
import clap.server.application.port.outbound.task.CommandTaskPort;
34
import clap.server.application.port.outbound.task.LoadTaskPort;
45
import clap.server.domain.model.task.Task;
56
import clap.server.exception.ApplicationException;
@@ -12,9 +13,14 @@
1213
public class TaskService {
1314

1415
private final LoadTaskPort loadTaskPort;
16+
private final CommandTaskPort commandTaskPort;
1517

1618
public Task findById(Long taskId) {
1719
return loadTaskPort.findById(taskId).orElseThrow(
1820
()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND));
1921
}
22+
23+
public Task upsert(Task task) {
24+
return commandTaskPort.save(task);
25+
}
2026
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package clap.server.application.port.inbound.task;
2+
3+
public interface TerminateTaskUsecase {
4+
void terminateTask(Long memberId, Long taskId, String reason);
5+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package clap.server.application.port.inbound.task;
22

33
import clap.server.adapter.inbound.web.dto.task.response.UpdateTaskResponse;
4-
import clap.server.adapter.inbound.web.dto.task.request.UpdateTaskStatusRequest;
4+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
55

66
public interface UpdateTaskStatusUsecase {
7-
UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStatusRequest updateTaskStatusRequest);
7+
UpdateTaskResponse updateTaskStatus(Long memberId, Long taskId, TaskStatus taskStatus);
88
}

src/main/java/clap/server/application/service/task/ApprovalTaskService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public ApprovalTaskResponse approvalTaskByReviewer(Long reviewerId, Long taskId,
5757
List<Member> receivers = List.of(reviewer, processor);
5858
publishNotification(receivers, task);
5959

60-
return TaskResponseMapper.toApprovalTaskResponse(commandTaskPort.save(task));
60+
return TaskResponseMapper.toApprovalTaskResponse(taskService.upsert(task));
6161
}
6262

6363
@Override

0 commit comments

Comments
 (0)