11package clap .server .application .service .task ;
22
33import clap .server .adapter .inbound .web .dto .task .request .UpdateTaskOrderRequest ;
4+ import clap .server .adapter .outbound .persistense .entity .notification .constant .NotificationType ;
45import clap .server .adapter .outbound .persistense .entity .task .constant .TaskStatus ;
56import clap .server .application .port .inbound .domain .MemberService ;
67import clap .server .application .port .inbound .domain .TaskService ;
78import clap .server .application .port .inbound .task .UpdateTaskBoardUsecase ;
89import clap .server .application .port .inbound .task .UpdateTaskOrderAndStatusUsecase ;
910import clap .server .application .port .outbound .task .LoadTaskPort ;
11+ import clap .server .application .service .webhook .SendNotificationService ;
1012import clap .server .common .annotation .architecture .ApplicationService ;
1113import clap .server .domain .model .member .Member ;
1214import clap .server .domain .model .task .Task ;
1921import lombok .extern .slf4j .Slf4j ;
2022import org .springframework .transaction .annotation .Transactional ;
2123
24+ import java .util .List ;
25+
2226@ Slf4j
2327@ ApplicationService
2428@ RequiredArgsConstructor
2529class 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