diff --git a/src/main/java/foregg/foreggserver/converter/NotificationConverter.java b/src/main/java/foregg/foreggserver/converter/NotificationConverter.java index 70809b33..13b3ff0a 100644 --- a/src/main/java/foregg/foreggserver/converter/NotificationConverter.java +++ b/src/main/java/foregg/foreggserver/converter/NotificationConverter.java @@ -11,21 +11,21 @@ public class NotificationConverter { - public static List fromReplyToNotification(List replyList) { - List result = new ArrayList<>(); - for (Reply reply : replyList) { - NotificationDTO dto = NotificationDTO.builder() - .id(reply.getId()) - .targetKey(reply.getDaily().getDate()) - .notificationType(NotificationType.REPLY) - .sender(reply.getSender().getNickname()) - .elapsedTime(DateUtil.getElapsedTime(reply.getCreatedAt())) - .createdAt(reply.getCreatedAt().toString()) - .build(); - result.add(dto); - } - return result; - } +// public static List fromReplyToNotification(List replyList) { +// List result = new ArrayList<>(); +// for (Reply reply : replyList) { +// NotificationDTO dto = NotificationDTO.builder() +// .id(reply.getId()) +// .targetKey(reply.getDaily().getDate()) +// .notificationType(NotificationType.REPLY) +// .sender(reply.getSender().getNickname()) +// .elapsedTime(DateUtil.getElapsedTime(reply.getCreatedAt())) +// .createdAt(reply.getCreatedAt().toString()) +// .build(); +// result.add(dto); +// } +// return result; +// } public static List toNotificationResponse(List notificationList) { List result = new ArrayList<>(); diff --git a/src/main/java/foregg/foreggserver/domain/Reply.java b/src/main/java/foregg/foreggserver/domain/Reply.java index 7b0c8962..3e020240 100644 --- a/src/main/java/foregg/foreggserver/domain/Reply.java +++ b/src/main/java/foregg/foreggserver/domain/Reply.java @@ -30,12 +30,10 @@ public class Reply extends BaseEntity { @JoinColumn(name = "daily_id") private Daily daily; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "receiver") - private User receiver; + @Column(nullable = false) + private Long receiverId; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "sender") - private User sender; + @Column(nullable = false) + private Long senderId; } diff --git a/src/main/java/foregg/foreggserver/domain/User.java b/src/main/java/foregg/foreggserver/domain/User.java index a0919d52..d015e055 100644 --- a/src/main/java/foregg/foreggserver/domain/User.java +++ b/src/main/java/foregg/foreggserver/domain/User.java @@ -92,9 +92,6 @@ public class User extends BaseEntity implements UserDetails { @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List ledgerMemos; - @OneToMany(mappedBy = "receiver", cascade = CascadeType.ALL, orphanRemoval = true) - private List replies; - // Jwt 전용 설정 (UserDetails 인터페이스 구현) @ElementCollection(fetch = FetchType.EAGER) //roles 컬렉션 diff --git a/src/main/java/foregg/foreggserver/repository/ReplyRepository.java b/src/main/java/foregg/foreggserver/repository/ReplyRepository.java index 8558c6c9..f2cc3e2b 100644 --- a/src/main/java/foregg/foreggserver/repository/ReplyRepository.java +++ b/src/main/java/foregg/foreggserver/repository/ReplyRepository.java @@ -7,6 +7,6 @@ public interface ReplyRepository extends JpaRepository { - List findByReceiver(User user); + List findByReceiverId(Long receiverId); } diff --git a/src/main/java/foregg/foreggserver/service/challengeService/ChallengeService.java b/src/main/java/foregg/foreggserver/service/challengeService/ChallengeService.java index 3315c78f..62585310 100644 --- a/src/main/java/foregg/foreggserver/service/challengeService/ChallengeService.java +++ b/src/main/java/foregg/foreggserver/service/challengeService/ChallengeService.java @@ -184,7 +184,7 @@ public void cheer(Long receiverId, NotificationType type, Long challengeId) { throw new ChallengeHandler(NO_MORE_THAN_THIRD_TIME); } - if (notificationRepository.findBySenderAndReceiverAndDateAndNotificationType(sender.getChallengeName(), receiver, LocalDate.now().toString(), type) != null) { + if (notificationRepository.findBySenderAndReceiverAndDateAndNotificationTypeAndTargetId(sender.getChallengeName(), receiver, LocalDate.now().toString(), type, challengeId) != null) { throw new ChallengeHandler(ALREADY_SEND_CHEER); } diff --git a/src/main/java/foregg/foreggserver/service/dailyService/DailyService.java b/src/main/java/foregg/foreggserver/service/dailyService/DailyService.java index 2b5162da..f1c6f838 100644 --- a/src/main/java/foregg/foreggserver/service/dailyService/DailyService.java +++ b/src/main/java/foregg/foreggserver/service/dailyService/DailyService.java @@ -96,8 +96,8 @@ public void reply(DailyReplyRequestDTO dto) { .content(dto.getContent()) .replyEmojiType(dto.getReplyEmojiType()) .daily(daily) - .receiver(wife) - .sender(userQueryService.getUser()) + .receiverId(wife.getId()) + .senderId(userQueryService.getUser().getId()) .build(); replyRepository.save(reply); daily.setReply(reply); diff --git a/src/main/java/foregg/foreggserver/service/notificationService/NotificationQueryService.java b/src/main/java/foregg/foreggserver/service/notificationService/NotificationQueryService.java index 9663144c..36546593 100644 --- a/src/main/java/foregg/foreggserver/service/notificationService/NotificationQueryService.java +++ b/src/main/java/foregg/foreggserver/service/notificationService/NotificationQueryService.java @@ -5,12 +5,15 @@ import foregg.foreggserver.domain.Notification; import foregg.foreggserver.domain.Reply; import foregg.foreggserver.domain.User; +import foregg.foreggserver.domain.enums.NotificationType; import foregg.foreggserver.dto.notificationDTO.NotificationResponseDTO; import foregg.foreggserver.dto.notificationDTO.NotificationResponseDTO.NotificationDTO; import foregg.foreggserver.jwt.SecurityUtil; import foregg.foreggserver.repository.NotificationRepository; import foregg.foreggserver.repository.ReplyRepository; +import foregg.foreggserver.repository.UserRepository; import foregg.foreggserver.service.userService.UserQueryService; +import foregg.foreggserver.util.DateUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -29,6 +32,7 @@ public class NotificationQueryService { private final ReplyRepository replyRepository; + private final UserRepository userRepository; private final UserQueryService userQueryService; private final NotificationRepository notificationRepository; @@ -39,7 +43,7 @@ public NotificationResponseDTO getNotificationHistory(int page) { User user = userQueryService.getUser(); // 필터링된 Reply 리스트 - List replyList = replyRepository.findByReceiver(user).stream() + List replyList = replyRepository.findByReceiverId(user.getId()).stream() .filter(reply -> reply.getCreatedAt().isAfter(thresholdDate)) .toList(); @@ -49,7 +53,7 @@ public NotificationResponseDTO getNotificationHistory(int page) { .toList(); // 결과 생성 - result.addAll(NotificationConverter.fromReplyToNotification(replyList)); + result.addAll(this.fromReplyToNotification(replyList)); result.addAll(NotificationConverter.toNotificationResponse(notificationList)); // createdAt 순서로 정렬 @@ -77,5 +81,21 @@ public NotificationResponseDTO getNotificationHistory(int page) { .build(); } + private List fromReplyToNotification(List replyList) { + List result = new ArrayList<>(); + for (Reply reply : replyList) { + NotificationDTO dto = NotificationDTO.builder() + .id(reply.getId()) + .targetKey(reply.getDaily().getDate()) + .notificationType(NotificationType.REPLY) + .sender(userRepository.findById(reply.getSenderId()).get().getNickname()) + .elapsedTime(DateUtil.getElapsedTime(reply.getCreatedAt())) + .createdAt(reply.getCreatedAt().toString()) + .build(); + result.add(dto); + } + return result; + } + }