Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ public List<Notification> findNotificationsByMemberId(final Long memberId) {
.collect(Collectors.toList());
}

@Override
public List<Notification> 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);
Expand All @@ -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));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,18 @@
public interface NotificationRepository extends JpaRepository<NotificationEntity, Long> {

@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<NotificationEntity> findAllByReceiver_MemberIdOrderByCreatedAtDesc(
@Param("receiverId") Long receiverId, Pageable pageable);

@Query("SELECT n FROM NotificationEntity n " +
"WHERE n.receiver.memberId = :receiverId " +
"AND n.task.isDeleted = false")
List<NotificationEntity> findAllByReceiver_MemberId(Long memberId);

List<NotificationEntity> findByTask_TaskId(Long taskId);

Integer countByIsReadFalseAndReceiver_MemberId(Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@

public interface CommandNotificationPort {
void save(Notification notification);

void delete(Notification notification);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,7 @@ public interface LoadNotificationPort {

List<Notification> findNotificationsByMemberId(Long memberId);

List<Notification> findNotificationsByTaskId(Long taskId);

Integer countNotification(Long memberId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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);
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,37 @@

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
@RequiredArgsConstructor
@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<Notification> notificationList = loadNotificationPort.findNotificationsByTaskId(taskId);

notificationList.forEach(commandNotificationPort::delete);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<Member> receivers = List.of(task.getRequester(), task.getProcessor());
List<Member> receivers = List.of(task.getRequester());
publishNotification(receivers, updateTask, NotificationType.STATUS_SWITCHED, String.valueOf(updateTask.getTaskStatus()));
}
}
Expand All @@ -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<Member> receivers = List.of(updateTask.getRequester(), updateTask.getProcessor());
List<Member> receivers = List.of(updateTask.getRequester());
publishNotification(receivers, updateTask, NotificationType.PROCESSOR_CHANGED, processor.getNickname());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
alter table notification
modify task_title varchar(30) not null;