Skip to content

Commit eb4d03d

Browse files
committed
CLAP-267 Feat: 상태 변경시에 알림 전송 로직 추가
<footer> - 관련: #302
1 parent 47a2cd1 commit eb4d03d

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

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

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package clap.server.application.service.task;
22

33
import clap.server.adapter.inbound.web.dto.task.request.UpdateTaskOrderRequest;
4+
import clap.server.adapter.outbound.persistense.entity.notification.constant.NotificationType;
45
import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus;
56
import clap.server.application.port.inbound.domain.MemberService;
67
import clap.server.application.port.inbound.domain.TaskService;
78
import clap.server.application.port.inbound.task.UpdateTaskBoardUsecase;
89
import clap.server.application.port.inbound.task.UpdateTaskOrderAndStatusUsecase;
910
import clap.server.application.port.outbound.task.LoadTaskPort;
11+
import clap.server.application.service.webhook.SendNotificationService;
1012
import clap.server.common.annotation.architecture.ApplicationService;
1113
import clap.server.domain.model.member.Member;
1214
import clap.server.domain.model.task.Task;
@@ -19,13 +21,16 @@
1921
import lombok.extern.slf4j.Slf4j;
2022
import org.springframework.transaction.annotation.Transactional;
2123

24+
import java.util.List;
25+
2226
@Slf4j
2327
@ApplicationService
2428
@RequiredArgsConstructor
2529
class UpdateTaskBoardService implements UpdateTaskBoardUsecase, UpdateTaskOrderAndStatusUsecase {
2630
private final MemberService memberService;
2731
private final TaskService taskService;
2832
private final LoadTaskPort loadTaskPort;
33+
private final SendNotificationService sendNotificationService;
2934

3035
private final TaskOrderCalculationPolicy taskOrderCalculationPolicy;
3136
private final ProcessorValidationPolicy processorValidationPolicy;
@@ -98,6 +103,7 @@ public void updateTaskOrderAndStatus(Long processorId, UpdateTaskOrderRequest re
98103
Task targetTask = taskService.findById(request.targetTaskId());
99104
processorValidationPolicy.validateProcessor(processorId, targetTask);
100105

106+
Task updatedTask;
101107
Task prevTask;
102108
Task nextTask;
103109

@@ -116,44 +122,47 @@ public void updateTaskOrderAndStatus(Long processorId, UpdateTaskOrderRequest re
116122
// 하나의 task만 존재할 경우 상태만 update
117123
if (prevTask == null && nextTask == null) {
118124
targetTask.updateTaskStatus(targetStatus);
119-
taskService.upsert(targetTask);
125+
updatedTask = taskService.upsert(targetTask);
120126
} else if (prevTask == null) {
121127
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(null, nextTask);
122-
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
128+
updatedTask = updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
123129
} else if (nextTask == null) {
124130
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(prevTask, null);
125-
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
131+
updatedTask = updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
126132
} else {
127133
long newOrder = taskOrderCalculationPolicy.calculateNewProcessorOrder(prevTask.getProcessorOrder(), nextTask.getProcessorOrder());
128-
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
134+
updatedTask = updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
129135
}
130136
} else if (request.prevTaskId() == 0) {
131137
nextTask = findByIdAndStatus(request.nextTaskId(), targetStatus);
132138
// 해당 상태에서 바로 앞 있는 작업 찾기
133139
prevTask = loadTaskPort.findPrevOrderTaskByProcessorOrderAndStatus(processorId, targetStatus, nextTask.getProcessorOrder()).orElse(null);
134140
long newOrder = taskOrderCalculationPolicy.calculateOrderForTop(prevTask, nextTask);
135-
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
141+
updatedTask = updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
136142
} else if (request.nextTaskId() == 0) {
137143
prevTask = findByIdAndStatus(request.prevTaskId(), targetStatus);
138144
// 해당 상태에서 바로 뒤에 있는 작업 찾기
139145
nextTask = loadTaskPort.findNextOrderTaskByProcessorOrderAndStatus(processorId, targetStatus, prevTask.getProcessorOrder()).orElse(null);
140146
long newOrder = taskOrderCalculationPolicy.calculateOrderForBottom(prevTask, nextTask);
141-
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
147+
updatedTask = updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
142148
} else {
143149
prevTask = findByIdAndStatus(request.prevTaskId(), targetStatus);
144150
nextTask = findByIdAndStatus(request.nextTaskId(), targetStatus);
145151
long newOrder = taskOrderCalculationPolicy.calculateNewProcessorOrder(prevTask.getProcessorOrder(), nextTask.getProcessorOrder());
146-
updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
152+
updatedTask = updateNewTaskOrderAndStatus(targetStatus, targetTask, newOrder);
147153
}
154+
155+
//TODO: 최종 단계에서 주석 처리 해제
156+
//publishNotification(targetTask, NotificationType.STATUS_SWITCHED, String.valueOf(updatedTask.getTaskStatus()));
148157
}
149158

150159
/**
151160
* 작업의 상태와 순서를 업데이트하는 메서드
152161
*/
153-
private void updateNewTaskOrderAndStatus(TaskStatus targetStatus, Task targetTask, long newOrder) {
162+
private Task updateNewTaskOrderAndStatus(TaskStatus targetStatus, Task targetTask, long newOrder) {
154163
targetTask.updateProcessorOrder(newOrder);
155164
targetTask.updateTaskStatus(targetStatus);
156-
taskService.upsert(targetTask);
165+
return taskService.upsert(targetTask);
157166
}
158167

159168
/**
@@ -166,5 +175,15 @@ public void validateRequest(UpdateTaskOrderRequest request, TaskStatus targetSta
166175
}
167176
}
168177

178+
private void publishNotification(Task task, NotificationType notificationType, String message) {
179+
List<Member> receivers = List.of(task.getRequester(), task.getProcessor());
180+
receivers.forEach(receiver -> {
181+
sendNotificationService.sendPushNotification(receiver, notificationType,
182+
task, message, null);
183+
});
184+
sendNotificationService.sendAgitNotification(notificationType,
185+
task, message, null);
186+
}
187+
169188
}
170189

0 commit comments

Comments
 (0)