Skip to content

Commit c5d7963

Browse files
committed
CLAP-159 Feat: 작업 처리자 변경 기능 구현
1 parent b1b2759 commit c5d7963

File tree

5 files changed

+55
-7
lines changed

5 files changed

+55
-7
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/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: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest;
44
import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse;
55
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;
78
import clap.server.application.mapper.AttachmentMapper;
89
import clap.server.application.mapper.TaskMapper;
910
import clap.server.application.port.inbound.domain.CategoryService;
1011
import clap.server.application.port.inbound.domain.MemberService;
1112
import clap.server.application.port.inbound.domain.TaskService;
13+
import clap.server.application.port.inbound.task.UpdateTaskProcessorUsecase;
1214
import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase;
1315
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
1416
import clap.server.application.port.outbound.task.CommandAttachmentPort;
@@ -22,6 +24,7 @@
2224
import clap.server.domain.model.task.Task;
2325

2426
import clap.server.exception.ApplicationException;
27+
import clap.server.exception.code.MemberErrorCode;
2528
import clap.server.exception.code.TaskErrorCode;
2629
import lombok.RequiredArgsConstructor;
2730
import lombok.extern.slf4j.Slf4j;
@@ -35,7 +38,7 @@
3538
@ApplicationService
3639
@RequiredArgsConstructor
3740
@Slf4j
38-
public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUsecase {
41+
public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUsecase, UpdateTaskProcessorUsecase {
3942

4043
private final MemberService memberService;
4144
private final CategoryService categoryService;
@@ -77,6 +80,22 @@ public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTask
7780
// TODO : 알림 생성 로직 및 푸시 알림 로직 추가
7881
}
7982

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);
93+
Task updateTask = commandTaskPort.save(task);
94+
return TaskMapper.toUpdateTaskResponse(updateTask);
95+
96+
// TODO : 알림 생성 로직 및 푸시 알림 로직 추가
97+
}
98+
8099
private void updateAttachments(List<Long> attachmentIdsToDelete, List<MultipartFile> files, Task task) {
81100
List<Attachment> attachmentsToDelete = validateAndGetAttachments(attachmentIdsToDelete, task);
82101
attachmentsToDelete.forEach(Attachment::softDelete);
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+
}

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)