From b778f3b073d814a458d7c92c9a62753916eda243 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 12 Feb 2025 11:43:24 +0900 Subject: [PATCH 1/6] =?UTF-8?q?CLAP-393=20Fix=20:=20=EA=B1=B0=EB=B6=80?= =?UTF-8?q?=EB=90=9C=20=EC=9E=91=EC=97=85=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=20=EC=83=9D=EC=84=B1=20Logic=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EB=B0=8F=20=EC=95=8C=EB=A6=BC=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EB=B2=94=EC=9C=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/history/PostCommentService.java | 18 +++++++++--------- .../service/task/UpdateTaskService.java | 7 +++++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/clap/server/application/service/history/PostCommentService.java b/src/main/java/clap/server/application/service/history/PostCommentService.java index 0050e836..7912fc7b 100644 --- a/src/main/java/clap/server/application/service/history/PostCommentService.java +++ b/src/main/java/clap/server/application/service/history/PostCommentService.java @@ -58,12 +58,11 @@ public void save(Long memberId, Long taskId, CreateCommentRequest request) { Member processor = task.getProcessor(); Member requester = task.getRequester(); - if (Objects.equals(member.getMemberId(), requester.getMemberId())) { - publishNotification(processor, task, request.content(), member.getNickname()); - } else { - publishNotification(requester, task, request.content(), member.getNickname()); - } + Member receiver = Objects.equals(member.getMemberId(), requester.getMemberId()) ? processor : requester; + if (receiver != null) { + publishNotification(receiver, task, request.content(), member.getNickname()); + } } @Transactional @@ -85,10 +84,11 @@ public void saveCommentAttachment(Long memberId, Long taskId, MultipartFile file Member processor = task.getProcessor(); Member requester = task.getRequester(); - if (member.getMemberInfo().getRole() == requester.getMemberInfo().getRole()) { - publishNotification(processor, task, fileName + "(첨부파일)", requester.getNickname()); - } else { - publishNotification(requester, task, fileName + "(첨부파일)", processor.getNickname()); + Member receiver = Objects.equals(member.getMemberId(), requester.getMemberId()) ? processor : requester; + String senderNickname = Objects.equals(member.getMemberId(), requester.getMemberId()) ? requester.getNickname() : processor.getNickname(); + + if (receiver != null) { + publishNotification(receiver, task, fileName + "(첨부파일)", senderNickname); } } diff --git a/src/main/java/clap/server/application/service/task/UpdateTaskService.java b/src/main/java/clap/server/application/service/task/UpdateTaskService.java index e5bffd76..6daad0ed 100644 --- a/src/main/java/clap/server/application/service/task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/service/task/UpdateTaskService.java @@ -33,6 +33,9 @@ import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static clap.server.domain.policy.task.TaskPolicyConstants.TASK_MAX_FILE_COUNT; import static clap.server.domain.policy.task.TaskPolicyConstants.TASK_UPDATABLE_STATUS; @@ -89,7 +92,7 @@ public void updateTaskStatus(Long memberId, Long taskId, TaskStatus taskStatus) TaskHistory taskHistory = TaskHistory.createTaskHistory(TaskHistoryType.STATUS_SWITCHED, task, taskStatus.getDescription(), null, null); commandTaskHistoryPort.save(taskHistory); - List receivers = List.of(task.getRequester(), task.getProcessor()); + List receivers = List.of(task.getRequester()); publishNotification(receivers, updateTask, NotificationType.STATUS_SWITCHED, String.valueOf(updateTask.getTaskStatus())); } } @@ -107,7 +110,7 @@ public void updateTaskProcessor(Long taskId, Long memberId, UpdateTaskProcessorR TaskHistory taskHistory = TaskHistory.createTaskHistory(TaskHistoryType.PROCESSOR_CHANGED, task, null, processor, null); commandTaskHistoryPort.save(taskHistory); - List receivers = List.of(updateTask.getRequester(), updateTask.getProcessor()); + List receivers = List.of(updateTask.getRequester()); publishNotification(receivers, updateTask, NotificationType.PROCESSOR_CHANGED, processor.getNickname()); } From 6e0cfa473fa838ff46a2762234205720da459e52 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 12 Feb 2025 12:12:35 +0900 Subject: [PATCH 2/6] =?UTF-8?q?CLAP-393=20Fix=20:=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/notification/NotificationRepository.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java index 0a8b86e1..191846a8 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java @@ -24,6 +24,11 @@ public interface NotificationRepository extends JpaRepository findAllByReceiver_MemberIdOrderByCreatedAtDesc( @Param("receiverId") Long receiverId, Pageable pageable); + @Query("SELECT n FROM NotificationEntity n " + + "JOIN FETCH n.task t " + + "JOIN FETCH n.receiver r " + + "WHERE n.receiver.memberId = :receiverId " + + "AND t.isDeleted = false ") List findAllByReceiver_MemberId(Long memberId); Integer countByIsReadFalseAndReceiver_MemberId(Long memberId); From 47cfcbf5d399f4e595649b6173dbbf338a0a12f7 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 12 Feb 2025 12:27:15 +0900 Subject: [PATCH 3/6] =?UTF-8?q?CLAP-393=20Fix=20:=20FETCH=20JOIN=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/notification/NotificationRepository.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java index 191846a8..3b72fbd1 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java @@ -16,19 +16,15 @@ public interface NotificationRepository extends JpaRepository { @Query("SELECT n FROM NotificationEntity n " + - "JOIN FETCH n.task t " + - "JOIN FETCH n.receiver r " + "WHERE n.receiver.memberId = :receiverId " + - "AND t.isDeleted = false " + + "AND n.task.isDeleted = false " + "ORDER BY n.createdAt DESC") Slice findAllByReceiver_MemberIdOrderByCreatedAtDesc( @Param("receiverId") Long receiverId, Pageable pageable); @Query("SELECT n FROM NotificationEntity n " + - "JOIN FETCH n.task t " + - "JOIN FETCH n.receiver r " + "WHERE n.receiver.memberId = :receiverId " + - "AND t.isDeleted = false ") + "AND n.task.isDeleted = false") List findAllByReceiver_MemberId(Long memberId); Integer countByIsReadFalseAndReceiver_MemberId(Long memberId); From 7c44437368fde7f2c01d4d1a7446ed4cdb9c03f1 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 12 Feb 2025 12:39:49 +0900 Subject: [PATCH 4/6] =?UTF-8?q?CLAP-393=20Fix=20:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EA=B0=80=20=EC=9E=91=EC=97=85=20=EC=B7=A8=EC=86=8C?= =?UTF-8?q?=EC=8B=9C=20=ED=95=B4=EB=8B=B9=20=EC=95=8C=EB=A6=BC=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NotificationPersistenceAdapter.java | 12 ++++++++++++ .../notification/NotificationRepository.java | 2 ++ .../notification/CommandNotificationPort.java | 2 ++ .../notification/LoadNotificationPort.java | 2 ++ .../service/task/CancelTaskService.java | 15 ++++++++++++++- 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java index cae89e2e..1d215d31 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/NotificationPersistenceAdapter.java @@ -42,6 +42,13 @@ public List findNotificationsByMemberId(final Long memberId) { .collect(Collectors.toList()); } + @Override + public List findNotificationsByTaskId(Long taskId) { + return notificationRepository.findByTask_TaskId(taskId) + .stream().map(notificationPersistenceMapper::toDomain) + .collect(Collectors.toList()); + } + @Override public Integer countNotification(final Long memberId) { return notificationRepository.countByIsReadFalseAndReceiver_MemberId(memberId); @@ -51,4 +58,9 @@ public Integer countNotification(final Long memberId) { public void save(final Notification notification) { notificationRepository.save(notificationPersistenceMapper.toEntity(notification)); } + + @Override + public void delete(Notification notification) { + notificationRepository.delete(notificationPersistenceMapper.toEntity(notification)); + } } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java index 3b72fbd1..b871a0cf 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/notification/NotificationRepository.java @@ -27,5 +27,7 @@ Slice findAllByReceiver_MemberIdOrderByCreatedAtDesc( "AND n.task.isDeleted = false") List findAllByReceiver_MemberId(Long memberId); + List findByTask_TaskId(Long taskId); + Integer countByIsReadFalseAndReceiver_MemberId(Long memberId); } \ No newline at end of file diff --git a/src/main/java/clap/server/application/port/outbound/notification/CommandNotificationPort.java b/src/main/java/clap/server/application/port/outbound/notification/CommandNotificationPort.java index 7761d367..655c6295 100644 --- a/src/main/java/clap/server/application/port/outbound/notification/CommandNotificationPort.java +++ b/src/main/java/clap/server/application/port/outbound/notification/CommandNotificationPort.java @@ -5,4 +5,6 @@ public interface CommandNotificationPort { void save(Notification notification); + + void delete(Notification notification); } \ No newline at end of file diff --git a/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java b/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java index b740fdc8..663c707d 100644 --- a/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java +++ b/src/main/java/clap/server/application/port/outbound/notification/LoadNotificationPort.java @@ -16,5 +16,7 @@ public interface LoadNotificationPort { List findNotificationsByMemberId(Long memberId); + List findNotificationsByTaskId(Long taskId); + Integer countNotification(Long memberId); } \ No newline at end of file diff --git a/src/main/java/clap/server/application/service/task/CancelTaskService.java b/src/main/java/clap/server/application/service/task/CancelTaskService.java index 397a8acf..7660e7ae 100644 --- a/src/main/java/clap/server/application/service/task/CancelTaskService.java +++ b/src/main/java/clap/server/application/service/task/CancelTaskService.java @@ -2,12 +2,15 @@ import clap.server.application.port.inbound.domain.TaskService; import clap.server.application.port.inbound.task.CancelTaskUsecase; +import clap.server.application.port.outbound.notification.CommandNotificationPort; +import clap.server.application.port.outbound.notification.LoadNotificationPort; import clap.server.common.annotation.architecture.ApplicationService; +import clap.server.domain.model.notification.Notification; import clap.server.domain.model.task.Task; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; -import java.util.Objects; +import java.util.List; @ApplicationService @@ -15,11 +18,21 @@ @Transactional public class CancelTaskService implements CancelTaskUsecase { private final TaskService taskService; + private final LoadNotificationPort loadNotificationPort; + private final CommandNotificationPort commandNotificationPort; @Override public void cancleTask(Long taskId, Long memberId) { Task task = taskService.findById(taskId); + deleteNotification(task.getTaskId()); task.cancelTask(memberId); taskService.upsert(task); } + + private void deleteNotification(Long taskId) { + List notificationList = loadNotificationPort.findNotificationsByTaskId(taskId); + + notificationList.forEach(commandNotificationPort::delete); + } + } From e58eb44a009217b271d6505c236aa1e0f2bd8b65 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 12 Feb 2025 13:29:06 +0900 Subject: [PATCH 5/6] =?UTF-8?q?CLAP-393=20Fix=20:=20=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=ED=91=B8=EC=8B=9C=20=EC=95=8C=EB=A6=BC=20=EB=A9=98?= =?UTF-8?q?=ED=8A=B8=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/adapter/outbound/api/email/EmailTemplateBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/clap/server/adapter/outbound/api/email/EmailTemplateBuilder.java b/src/main/java/clap/server/adapter/outbound/api/email/EmailTemplateBuilder.java index bfdd1786..8239845f 100644 --- a/src/main/java/clap/server/adapter/outbound/api/email/EmailTemplateBuilder.java +++ b/src/main/java/clap/server/adapter/outbound/api/email/EmailTemplateBuilder.java @@ -24,7 +24,7 @@ public EmailTemplate createWebhookTemplate(PushNotificationTemplate request, Str switch (request.notificationType()) { case TASK_REQUESTED: templateName = "task-request"; - subject = "[TaskFlow] 신규 작업 "+ request.taskName()+ "이 요청되었습니다."; + subject = "[TaskFlow] 신규 작업 "+ request.taskName()+ "가 요청되었습니다."; context.setVariable("taskDetailUrl", taskDetailUrl); context.setVariable("receiverName", request.senderName()); context.setVariable("title", request.taskName()); From 820828bbeb0aa3a9d95155da5b02315b182b4de3 Mon Sep 17 00:00:00 2001 From: andrew Date: Wed, 12 Feb 2025 14:13:03 +0900 Subject: [PATCH 6/6] =?UTF-8?q?CLAP-393=20Fix=20:=20Notification=20table?= =?UTF-8?q?=20task=5Ftitle=2030=EC=9E=90=20=EC=A0=9C=ED=95=9C=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/V20250212393__Modify_Task_Title_From_Notification.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/resources/db/migration/dev/V20250212393__Modify_Task_Title_From_Notification.sql diff --git a/src/main/resources/db/migration/dev/V20250212393__Modify_Task_Title_From_Notification.sql b/src/main/resources/db/migration/dev/V20250212393__Modify_Task_Title_From_Notification.sql new file mode 100644 index 00000000..5246e28a --- /dev/null +++ b/src/main/resources/db/migration/dev/V20250212393__Modify_Task_Title_From_Notification.sql @@ -0,0 +1,2 @@ +alter table notification + modify task_title varchar(30) not null; \ No newline at end of file