Skip to content

Commit 2326a5c

Browse files
authored
Merge pull request #143 from TaskFlow-CLAP/CLAP-159
CLAP-159 작업 처리자 변경 API 구현
2 parents 69b8624 + c5d7963 commit 2326a5c

File tree

8 files changed

+61
-15
lines changed

8 files changed

+61
-15
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package clap.server.adapter.inbound.web.dto.task;
2+
3+
import clap.server.domain.model.member.Member;
4+
5+
public record UpdateTaskProcessorRequest(
6+
Long processorId
7+
) {
8+
}

src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStateRequest.java renamed to src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskStatusRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import jakarta.validation.constraints.NotNull;
66

77
@Schema(description = "작업 상태 변경 요청")
8-
public record UpdateTaskStateRequest(
8+
public record UpdateTaskStatusRequest(
99

1010
@Schema(description = "변경하고 싶은 작업 상태", example = "완료")
1111
@NotNull

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
import clap.server.adapter.inbound.security.SecurityUserDetails;
44
import clap.server.adapter.inbound.web.dto.task.*;
5-
import clap.server.application.port.inbound.task.ApprovalTaskUsecase;
6-
import clap.server.application.port.inbound.task.CreateTaskUsecase;
7-
import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase;
8-
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
5+
import clap.server.adapter.inbound.web.dto.task.UpdateTaskProcessorRequest;
6+
import clap.server.application.port.inbound.task.*;
97
import clap.server.common.annotation.architecture.WebAdapter;
108
import io.swagger.v3.oas.annotations.Operation;
119
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -32,6 +30,7 @@ public class ManagementTaskController {
3230
private final CreateTaskUsecase createTaskUsecase;
3331
private final UpdateTaskUsecase updateTaskUsecase;
3432
private final UpdateTaskStatusUsecase updateTaskStatusUsecase;
33+
private final UpdateTaskProcessorUsecase updateTaskProcessorUsecase;
3534
private final ApprovalTaskUsecase approvalTaskUsecase;
3635

3736
@Operation(summary = "작업 요청 생성")
@@ -62,9 +61,19 @@ public ResponseEntity<UpdateTaskResponse> updateTask(
6261
public ResponseEntity<UpdateTaskResponse> updateTaskState(
6362
@PathVariable @NotNull Long taskId,
6463
@AuthenticationPrincipal SecurityUserDetails userInfo,
65-
@RequestBody UpdateTaskStateRequest updateTaskStateRequest) {
64+
@RequestBody UpdateTaskStatusRequest updateTaskStatusRequest) {
6665

67-
return ResponseEntity.ok(updateTaskStatusUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStateRequest));
66+
return ResponseEntity.ok(updateTaskStatusUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStatusRequest));
67+
}
68+
69+
@Operation(summary = "작업 처리자 변경")
70+
@Secured({"ROLE_MANAGER"})
71+
@PatchMapping("/processor/{taskId}")
72+
public ResponseEntity<UpdateTaskResponse> updateTaskProcessor(
73+
@PathVariable Long taskId,
74+
@AuthenticationPrincipal SecurityUserDetails userInfo,
75+
@RequestBody UpdateTaskProcessorRequest updateTaskProcessorRequest) {
76+
return ResponseEntity.ok(updateTaskProcessorUsecase.updateTaskProcessor(taskId, userInfo.getUserId(), updateTaskProcessorRequest));
6877
}
6978

7079
@Operation(summary = "작업 승인")

src/main/java/clap/server/application/Task/UpdateTaskService.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest;
44
import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse;
5-
import clap.server.adapter.inbound.web.dto.task.UpdateTaskStateRequest;
5+
import clap.server.adapter.inbound.web.dto.task.UpdateTaskStatusRequest;
6+
import clap.server.adapter.inbound.web.dto.task.UpdateTaskProcessorRequest;
67
import clap.server.adapter.outbound.infrastructure.s3.S3UploadAdapter;
7-
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
88
import clap.server.application.mapper.AttachmentMapper;
99
import clap.server.application.mapper.TaskMapper;
1010
import clap.server.application.port.inbound.domain.CategoryService;
1111
import clap.server.application.port.inbound.domain.MemberService;
1212
import clap.server.application.port.inbound.domain.TaskService;
13+
import clap.server.application.port.inbound.task.UpdateTaskProcessorUsecase;
1314
import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase;
1415
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
1516
import clap.server.application.port.outbound.task.CommandAttachmentPort;
@@ -23,6 +24,7 @@
2324
import clap.server.domain.model.task.Task;
2425

2526
import clap.server.exception.ApplicationException;
27+
import clap.server.exception.code.MemberErrorCode;
2628
import clap.server.exception.code.TaskErrorCode;
2729
import lombok.RequiredArgsConstructor;
2830
import lombok.extern.slf4j.Slf4j;
@@ -36,7 +38,7 @@
3638
@ApplicationService
3739
@RequiredArgsConstructor
3840
@Slf4j
39-
public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUsecase {
41+
public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUsecase, UpdateTaskProcessorUsecase {
4042

4143
private final MemberService memberService;
4244
private final CategoryService categoryService;
@@ -68,10 +70,26 @@ public UpdateTaskResponse updateTask(Long requesterId, Long taskId, UpdateTaskRe
6870

6971
@Override
7072
@Transactional
71-
public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest) {
73+
public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStatusRequest updateTaskStatusRequest) {
7274
memberService.findActiveMember(memberId);
7375
Task task = taskService.findById(taskId);
74-
task.updateTaskStatus(updateTaskStateRequest.taskStatus());
76+
task.updateTaskStatus(updateTaskStatusRequest.taskStatus());
77+
Task updateTask = commandTaskPort.save(task);
78+
return TaskMapper.toUpdateTaskResponse(updateTask);
79+
80+
// TODO : 알림 생성 로직 및 푸시 알림 로직 추가
81+
}
82+
83+
@Transactional
84+
@Override
85+
public UpdateTaskResponse updateTaskProcessor(Long taskId, Long userId, UpdateTaskProcessorRequest request) {
86+
Member reviewer = memberService.findActiveMember(userId);
87+
Member processor = memberService.findById(request.processorId());
88+
if (!reviewer.isReviewer()) {
89+
throw new ApplicationException(MemberErrorCode.NOT_A_REVIEWER);
90+
}
91+
Task task = taskService.findById(taskId);
92+
task.updateProcessor(processor);
7593
Task updateTask = commandTaskPort.save(task);
7694
return TaskMapper.toUpdateTaskResponse(updateTask);
7795

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package clap.server.application.port.inbound.task;
2+
3+
import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse;
4+
import clap.server.adapter.inbound.web.dto.task.UpdateTaskProcessorRequest;
5+
6+
public interface UpdateTaskProcessorUsecase {
7+
UpdateTaskResponse updateTaskProcessor(Long taskId, Long userId, UpdateTaskProcessorRequest request);
8+
}
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.UpdateTaskResponse;
4-
import clap.server.adapter.inbound.web.dto.task.UpdateTaskStateRequest;
4+
import clap.server.adapter.inbound.web.dto.task.UpdateTaskStatusRequest;
55

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

src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest;
55
import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse;
6-
import clap.server.adapter.inbound.web.dto.task.UpdateTaskStateRequest;
76
import org.springframework.web.multipart.MultipartFile;
87

98
import java.util.List;

src/main/java/clap/server/domain/model/task/Task.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ public void updateTaskStatus(TaskStatus status) {
6363
this.taskStatus = status;
6464
}
6565

66+
public void updateProcessor(Member processor) {
67+
this.processor = processor;
68+
}
69+
6670
public void approveTask(Member reviewer, Member processor, LocalDateTime dueDate, Category category, Label label) {
6771
this.reviewer = reviewer;
6872
this.processor = processor;

0 commit comments

Comments
 (0)