Skip to content

Commit 47a2cd1

Browse files
committed
CLAP-267 Feat: 조회된 작업 보드에서 하나의 작업만 존재하고, 이 작업을 이동할 때의 case 구현
<footer> - 관련: #302
1 parent 2dda839 commit 47a2cd1

File tree

1 file changed

+38
-14
lines changed

1 file changed

+38
-14
lines changed

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

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ public void updateTaskOrder(Long processorId, UpdateTaskOrderRequest request) {
5353
if (request.prevTaskId() == 0) {
5454
Task nextTask = findByIdAndStatus(request.nextTaskId(), targetTask.getTaskStatus());
5555
// 해당 상태에서 바로 앞에 있는 작업 찾기
56-
Task prevTask = loadTaskPort.findPrevOrderTaskByProcessorIdAndStatus(processorId, targetTask.getTaskStatus(), nextTask.getProcessorOrder()).orElse(null);
56+
Task prevTask = loadTaskPort.findPrevOrderTaskByProcessorOrderAndStatus(processorId, targetTask.getTaskStatus(), nextTask.getProcessorOrder()).orElse(null);
5757
long newOrder = taskOrderCalculationPolicy.calculateOrderForTop(prevTask, nextTask);
5858
updateNewTaskOrder(targetTask, newOrder);
5959
}
6060
// 가장 하위로 이동
6161
else if (request.nextTaskId() == 0) {
6262
Task prevTask = findByIdAndStatus(request.prevTaskId(), targetTask.getTaskStatus());
6363
// 해당 상태에서 바로 뒤에 있는 작업 찾기
64-
Task nextTask = loadTaskPort.findNextOrderTaskByProcessorIdAndStatus(processorId, targetTask.getTaskStatus(), prevTask.getProcessorOrder()).orElse(null);
64+
Task nextTask = loadTaskPort.findNextOrderTaskByProcessorOrderAndStatus(processorId, targetTask.getTaskStatus(), prevTask.getProcessorOrder()).orElse(null);
6565
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(prevTask, nextTask);
6666
updateNewTaskOrder(targetTask, newOrder);
6767
} else {
@@ -98,21 +98,50 @@ public void updateTaskOrderAndStatus(Long processorId, UpdateTaskOrderRequest re
9898
Task targetTask = taskService.findById(request.targetTaskId());
9999
processorValidationPolicy.validateProcessor(processorId, targetTask);
100100

101-
if (request.prevTaskId() == 0) {
102-
Task nextTask = findByIdAndStatus(request.nextTaskId(), targetStatus);
101+
Task prevTask;
102+
Task nextTask;
103+
104+
// 조회된 작업 보드에서 하나의 작업만 존재하고, 이 작업을 이동할 때
105+
if (request.prevTaskId() == 0 && request.nextTaskId() == 0) {
106+
107+
// 요청 시간 기준으로 가장 가장 근접한 이전의 Task를 조회
108+
prevTask = loadTaskPort.findPrevOrderTaskByTaskIdAndStatus(processorId, targetStatus, targetTask.getTaskId()).orElse(null);
109+
if (prevTask != null) {
110+
// 이전 Task가 있다면 바로 다음의 Task 조회
111+
nextTask = loadTaskPort.findNextOrderTaskByProcessorOrderAndStatus(processorId, targetStatus, prevTask.getProcessorOrder()).orElse(null);
112+
} // 요청 시간 기준으로 가장 가장 근접한 이후의 Task를 조회
113+
else
114+
nextTask = loadTaskPort.findNextOrderTaskByTaskIdAndStatus(processorId, targetStatus, targetTask.getTaskId()).orElse(null);
115+
116+
// 하나의 task만 존재할 경우 상태만 update
117+
if (prevTask == null && nextTask == null) {
118+
targetTask.updateTaskStatus(targetStatus);
119+
taskService.upsert(targetTask);
120+
} else if (prevTask == null) {
121+
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(null, nextTask);
122+
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
123+
} else if (nextTask == null) {
124+
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(prevTask, null);
125+
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
126+
} else {
127+
long newOrder = taskOrderCalculationPolicy.calculateNewProcessorOrder(prevTask.getProcessorOrder(), nextTask.getProcessorOrder());
128+
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
129+
}
130+
} else if (request.prevTaskId() == 0) {
131+
nextTask = findByIdAndStatus(request.nextTaskId(), targetStatus);
103132
// 해당 상태에서 바로 앞 있는 작업 찾기
104-
Task prevTask = loadTaskPort.findPrevOrderTaskByProcessorIdAndStatus(processorId, targetStatus, nextTask.getProcessorOrder()).orElse(null);
133+
prevTask = loadTaskPort.findPrevOrderTaskByProcessorOrderAndStatus(processorId, targetStatus, nextTask.getProcessorOrder()).orElse(null);
105134
long newOrder = taskOrderCalculationPolicy.calculateOrderForTop(prevTask, nextTask);
106135
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
107136
} else if (request.nextTaskId() == 0) {
108-
Task prevTask = findByIdAndStatus(request.prevTaskId(), targetStatus);
137+
prevTask = findByIdAndStatus(request.prevTaskId(), targetStatus);
109138
// 해당 상태에서 바로 뒤에 있는 작업 찾기
110-
Task nextTask = loadTaskPort.findNextOrderTaskByProcessorIdAndStatus(processorId, targetStatus, prevTask.getProcessorOrder()).orElse(null);
139+
nextTask = loadTaskPort.findNextOrderTaskByProcessorOrderAndStatus(processorId, targetStatus, prevTask.getProcessorOrder()).orElse(null);
111140
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(prevTask, nextTask);
112141
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
113142
} else {
114-
Task prevTask = findByIdAndStatus(request.prevTaskId(), targetStatus);
115-
Task nextTask = findByIdAndStatus(request.nextTaskId(), targetStatus);
143+
prevTask = findByIdAndStatus(request.prevTaskId(), targetStatus);
144+
nextTask = findByIdAndStatus(request.nextTaskId(), targetStatus);
116145
long newOrder = taskOrderCalculationPolicy.calculateNewProcessorOrder(prevTask.getProcessorOrder(), nextTask.getProcessorOrder());
117146
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
118147
}
@@ -131,11 +160,6 @@ private void updateNewTaskOrderAndStatus(TaskStatus targetStatus, Task targetTas
131160
* 순서 변경 요청의 유효성을 검증하는 메서드
132161
*/
133162
public void validateRequest(UpdateTaskOrderRequest request, TaskStatus targetStatus) {
134-
// 이전 및 다음 작업 ID가 모두 0인 경우 예외 발생
135-
if (request.prevTaskId() == 0 && request.nextTaskId() == 0) {
136-
throw new ApplicationException(TaskErrorCode.INVALID_TASK_STATUS_TRANSITION);
137-
}
138-
139163
// 타겟 상태가 유효한지 검증
140164
if (targetStatus != null && !TaskPolicyConstants.TASK_BOARD_STATUS_FILTER.contains(targetStatus)) {
141165
throw new ApplicationException(TaskErrorCode.INVALID_TASK_STATUS_TRANSITION);

0 commit comments

Comments
 (0)