Skip to content

Commit 7da6f9f

Browse files
committed
CLAP-155 Refactor: 요청자인이 검증하는 로직을 도메인 레벨로 이동
<footer> - 관련: #133
1 parent 15ea89d commit 7da6f9f

File tree

4 files changed

+21
-29
lines changed

4 files changed

+21
-29
lines changed

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

Lines changed: 12 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import clap.server.application.mapper.AttachmentMapper;
66
import clap.server.application.mapper.TaskMapper;
77
import clap.server.application.port.inbound.domain.CategoryService;
8+
import clap.server.application.port.inbound.domain.LabelService;
89
import clap.server.application.port.inbound.domain.MemberService;
910
import clap.server.application.port.inbound.domain.TaskService;
1011
import clap.server.application.port.inbound.task.UpdateTaskLabelUsecase;
@@ -14,27 +15,21 @@
1415
import clap.server.application.port.outbound.task.CommandAttachmentPort;
1516
import clap.server.application.port.outbound.task.CommandTaskPort;
1617
import clap.server.application.port.outbound.task.LoadAttachmentPort;
17-
import clap.server.application.port.outbound.task.LoadLabelPort;
1818
import clap.server.common.annotation.architecture.ApplicationService;
19+
import clap.server.common.constants.FilePathConstants;
1920
import clap.server.domain.model.member.Member;
2021
import clap.server.domain.model.task.Attachment;
2122
import clap.server.domain.model.task.Category;
22-
import clap.server.common.constants.FilePathConstants;
23+
import clap.server.domain.model.task.Label;
2324
import clap.server.domain.model.task.Task;
24-
2525
import clap.server.exception.ApplicationException;
26-
import clap.server.exception.code.LabelErrorCode;
27-
import clap.server.exception.code.MemberErrorCode;
2826
import clap.server.exception.code.TaskErrorCode;
2927
import lombok.RequiredArgsConstructor;
3028
import lombok.extern.slf4j.Slf4j;
3129
import org.springframework.transaction.annotation.Transactional;
3230
import org.springframework.web.multipart.MultipartFile;
3331

3432
import java.util.List;
35-
import java.util.Objects;
36-
37-
import static clap.server.exception.code.MemberErrorCode.ACTIVE_MEMBER_NOT_FOUND;
3833

3934

4035
@ApplicationService
@@ -45,9 +40,10 @@ public class UpdateTaskService implements UpdateTaskUsecase, UpdateTaskStatusUse
4540
private final MemberService memberService;
4641
private final CategoryService categoryService;
4742
private final TaskService taskService;
43+
4844
private final CommandTaskPort commandTaskPort;
4945
private final LoadAttachmentPort loadAttachmentPort;
50-
private final LoadLabelPort loadLabelPort;
46+
private final LabelService labelService;
5147
private final CommandAttachmentPort commandAttachmentPort;
5248
private final S3UploadAdapter s3UploadAdapter;
5349

@@ -58,14 +54,10 @@ public UpdateTaskResponse updateTask(Long requesterId, Long taskId, UpdateTaskRe
5854
Category category = categoryService.findById(updateTaskRequest.categoryId());
5955
Task task = taskService.findById(taskId);
6056

61-
if(!Objects.equals(requester.getMemberId(), task.getRequester().getMemberId())) {
62-
throw new ApplicationException(TaskErrorCode.TASK_STATUS_MISMATCH);
63-
}
64-
65-
task.updateTask(task.getTaskStatus(), category, updateTaskRequest.title(), updateTaskRequest.description());
57+
task.updateTask(requesterId, category, updateTaskRequest.title(), updateTaskRequest.description());
6658
Task updatedTask = commandTaskPort.save(task);
6759

68-
if (!updateTaskRequest.attachmentsToDelete().isEmpty()){
60+
if (!updateTaskRequest.attachmentsToDelete().isEmpty()) {
6961
updateAttachments(updateTaskRequest.attachmentsToDelete(), files, task);
7062
}
7163
return TaskMapper.toUpdateTaskResponse(updatedTask);
@@ -86,11 +78,9 @@ public UpdateTaskResponse updateTaskState(Long memberId, Long taskId, UpdateTask
8678
@Transactional
8779
@Override
8880
public UpdateTaskResponse updateTaskProcessor(Long taskId, Long userId, UpdateTaskProcessorRequest request) {
89-
Member reviewer = memberService.findActiveMember(userId);
81+
Member reviewer = memberService.findReviewer(userId);
9082
Member processor = memberService.findById(request.processorId());
91-
if (!reviewer.isReviewer()) {
92-
throw new ApplicationException(MemberErrorCode.NOT_A_REVIEWER);
93-
}
83+
9484
Task task = taskService.findById(taskId);
9585
task.updateProcessor(processor);
9686
Task updateTask = commandTaskPort.save(task);
@@ -102,12 +92,9 @@ public UpdateTaskResponse updateTaskProcessor(Long taskId, Long userId, UpdateTa
10292
@Transactional
10393
@Override
10494
public UpdateTaskResponse updateTaskLabel(Long taskId, Long userId, UpdateTaskLabelRequest request) {
105-
Member reviewer = memberService.findActiveMember(userId);
106-
if (!reviewer.isReviewer()) {
107-
throw new ApplicationException(MemberErrorCode.NOT_A_REVIEWER);
108-
}
95+
Member reviewer = memberService.findReviewer(userId);
10996
Task task = taskService.findById(taskId);
110-
Label label = loadLabelPort.findById(request.labelId()).orElseThrow(() -> new ApplicationException(LabelErrorCode.LABEL_NOT_FOUND));
97+
Label label = labelService.findById(request.labelId());
11198

11299
task.updateLabel(label);
113100
Task updatetask = commandTaskPort.save(task);
@@ -125,7 +112,7 @@ private void updateAttachments(List<Long> attachmentIdsToDelete, List<MultipartF
125112

126113
private List<Attachment> validateAndGetAttachments(List<Long> attachmentIdsToDelete, Task task) {
127114
List<Attachment> attachmentsOfTask = loadAttachmentPort.findAllByTaskIdAndCommentIsNullAndAttachmentId(task.getTaskId(), attachmentIdsToDelete);
128-
if(attachmentsOfTask.size() != attachmentIdsToDelete.size()) {
115+
if (attachmentsOfTask.size() != attachmentIdsToDelete.size()) {
129116
throw new ApplicationException(TaskErrorCode.TASK_ATTACHMENT_NOT_FOUND);
130117
}
131118
return attachmentsOfTask;

src/main/java/clap/server/domain/model/member/Member.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package clap.server.domain.model.member;
22

3-
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
43
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberStatus;
54
import clap.server.domain.model.common.BaseTime;
65
import lombok.*;

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
44
import clap.server.domain.model.common.BaseTime;
55
import clap.server.domain.model.member.Member;
6+
import clap.server.exception.ApplicationException;
67
import clap.server.exception.DomainException;
78
import clap.server.exception.code.TaskErrorCode;
89
import lombok.AccessLevel;
@@ -45,8 +46,11 @@ public static Task createTask(Member member, Category category, String title, St
4546
.build();
4647
}
4748

48-
public void updateTask(TaskStatus status, Category category, String title, String description) {
49-
if (status != TaskStatus.REQUESTED) {
49+
public void updateTask(Long requesterId, Category category, String title, String description) {
50+
if(!Objects.equals(requesterId, this.requester.getMemberId() )) {
51+
throw new ApplicationException(TaskErrorCode.NOT_A_REQUESTER);
52+
}
53+
if (this.taskStatus != TaskStatus.REQUESTED) {
5054
throw new DomainException(TaskErrorCode.TASK_STATUS_MISMATCH);
5155
}
5256
this.category = category;

src/main/java/clap/server/exception/code/TaskErrorCode.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ public enum TaskErrorCode implements BaseErrorCode {
1212
TASK_STATUS_MISMATCH(HttpStatus.BAD_REQUEST, "TASK_003", "작업 상태가 일치하지 않습니다."),
1313
TASK_ATTACHMENT_NOT_FOUND(HttpStatus.NOT_FOUND, "TASK_004", "첨부파일을 찾을 수 없습니다."),
1414
LABEL_NOT_FOUND(HttpStatus.NOT_FOUND, "TASK_005", "작업구분을 찾을 수 없습니다."),
15-
NOT_A_PROCESSOR(HttpStatus.FORBIDDEN, "TASK_006", "작업 수정 권한이 없습니다."),
15+
NOT_A_PROCESSOR(HttpStatus.FORBIDDEN, "TASK_006", "작업 처리 및 수정 권한이 없습니다."),
1616
INVALID_TASK_ORDER(HttpStatus.INTERNAL_SERVER_ERROR, "TASK_007", "유효하지 않은 task order입니다."),
1717
INVALID_TASK_STATUS_TRANSITION(HttpStatus.BAD_REQUEST, "TASK_008", "유효하지 않은 작업 상태 전환입니다."),
18+
NOT_A_REVIEWER(HttpStatus.FORBIDDEN, "TASK_009", "작업 승인 및 수정 권한이 없습니다."),
19+
NOT_A_REQUESTER(HttpStatus.FORBIDDEN, "TASK_009", "작업 수정 권한이 없습니다."),
1820
;
1921

2022
private final HttpStatus httpStatus;

0 commit comments

Comments
 (0)