Skip to content

Commit b8a7a09

Browse files
authored
Merge pull request #132 from TaskFlow-CLAP/CLAP-154
CLAP-154 작업 상태 변경 API 구현
2 parents 3379625 + 04d40b2 commit b8a7a09

File tree

5 files changed

+51
-1
lines changed

5 files changed

+51
-1
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package clap.server.adapter.inbound.web.dto.task;
2+
3+
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import jakarta.validation.constraints.NotNull;
6+
7+
@Schema(description = "작업 상태 변경 요청")
8+
public record UpdateTaskStateRequest(
9+
10+
@Schema(description = "변경하고 싶은 작업 상태", example = "완료")
11+
@NotNull
12+
TaskStatus taskStatus
13+
) {
14+
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import clap.server.adapter.inbound.web.dto.task.*;
55
import clap.server.application.port.inbound.task.ApprovalTaskUsecase;
66
import clap.server.application.port.inbound.task.CreateTaskUsecase;
7+
import clap.server.application.port.inbound.task.UpdateTaskStatusUsecase;
78
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
89
import clap.server.common.annotation.architecture.WebAdapter;
910
import io.swagger.v3.oas.annotations.Operation;
@@ -30,6 +31,7 @@ public class ManagementTaskController {
3031

3132
private final CreateTaskUsecase createTaskUsecase;
3233
private final UpdateTaskUsecase updateTaskUsecase;
34+
private final UpdateTaskStatusUsecase updateTaskStatusUsecase;
3335
private final ApprovalTaskUsecase approvalTaskUsecase;
3436

3537
@Operation(summary = "작업 요청 생성")
@@ -54,6 +56,17 @@ public ResponseEntity<UpdateTaskResponse> updateTask(
5456
return ResponseEntity.ok(updateTaskUsecase.updateTask(userInfo.getUserId(), taskId, updateTaskRequest, attachments));
5557
}
5658

59+
@Operation(summary = "작업 상태 변경")
60+
@Secured({"ROLE_MANGER"})
61+
@PatchMapping("/state/{taskId}")
62+
public ResponseEntity<UpdateTaskResponse> updateTaskState(
63+
@PathVariable @NotNull Long taskId,
64+
@AuthenticationPrincipal SecurityUserDetails userInfo,
65+
@RequestBody UpdateTaskStateRequest updateTaskStateRequest) {
66+
67+
return ResponseEntity.ok(updateTaskStatusUsecase.updateTaskState(userInfo.getUserId(), taskId, updateTaskStateRequest));
68+
}
69+
5770
@Operation(summary = "작업 승인")
5871
@Secured({"ROLE_MANAGER"})
5972
@PostMapping("/approval/{taskId}")

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +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;
56
import clap.server.adapter.outbound.infrastructure.s3.S3UploadAdapter;
67
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
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.UpdateTaskStatusUsecase;
1214
import clap.server.application.port.inbound.task.UpdateTaskUsecase;
1315
import clap.server.application.port.outbound.task.CommandAttachmentPort;
1416
import clap.server.application.port.outbound.task.CommandTaskPort;
@@ -34,7 +36,7 @@
3436
@ApplicationService
3537
@RequiredArgsConstructor
3638
@Slf4j
37-
public class UpdateTaskService implements UpdateTaskUsecase {
39+
public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUsecase {
3840

3941
private final MemberService memberService;
4042
private final CategoryService categoryService;
@@ -64,6 +66,18 @@ public UpdateTaskResponse updateTask(Long requesterId, Long taskId, UpdateTaskRe
6466
return TaskMapper.toUpdateTaskResponse(updatedTask);
6567
}
6668

69+
@Override
70+
@Transactional
71+
public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest) {
72+
memberService.findActiveMember(memberId);
73+
Task task = taskService.findById(taskId);
74+
task.updateTaskStatus(updateTaskStateRequest.taskStatus());
75+
Task updateTask = commandTaskPort.save(task);
76+
return TaskMapper.toUpdateTaskResponse(updateTask);
77+
78+
// TODO : 알림 생성 로직 및 푸시 알림 로직 추가
79+
}
80+
6781
private void updateAttachments(List<Long> attachmentIdsToDelete, List<MultipartFile> files, Task task) {
6882
List<Attachment> attachmentsToDelete = validateAndGetAttachments(attachmentIdsToDelete, task);
6983
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.UpdateTaskStateRequest;
5+
6+
public interface UpdateTaskStatusUsecase {
7+
UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTaskStateRequest updateTaskStateRequest);
8+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
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;
67
import org.springframework.web.multipart.MultipartFile;
78

89
import java.util.List;

0 commit comments

Comments
 (0)