diff --git a/src/main/java/com/chooz/notification/application/service/NotificationCommandService.java b/src/main/java/com/chooz/notification/application/service/NotificationCommandService.java index 9edf5ad..4f503a8 100644 --- a/src/main/java/com/chooz/notification/application/service/NotificationCommandService.java +++ b/src/main/java/com/chooz/notification/application/service/NotificationCommandService.java @@ -29,7 +29,7 @@ public Notification create(Notification notification) { } @Transactional(propagation = Propagation.REQUIRES_NEW) public void createAll(List notifications) { - List existsNotifications = notificationQueryRepository.existsDedupKeyByNotifications(notifications); + List existsNotifications = notificationQueryRepository.findNotificationsByDedupKey(notifications); Set existingPairs = getExistingPairs(existsNotifications); List toSave = getNotificationsNotDuplicated(notifications, existingPairs); if (!toSave.isEmpty()) { diff --git a/src/main/java/com/chooz/notification/application/web/dto/NotificationRowDto.java b/src/main/java/com/chooz/notification/application/web/dto/NotificationRowDto.java index ffc5634..b09eb41 100644 --- a/src/main/java/com/chooz/notification/application/web/dto/NotificationRowDto.java +++ b/src/main/java/com/chooz/notification/application/web/dto/NotificationRowDto.java @@ -14,6 +14,7 @@ public record NotificationRowDto( String title, String content, String imageUrl, + boolean isValid, boolean isRead, LocalDateTime eventAt ) {} diff --git a/src/main/java/com/chooz/notification/domain/NotificationQueryRepository.java b/src/main/java/com/chooz/notification/domain/NotificationQueryRepository.java index fea4a72..ba4851c 100644 --- a/src/main/java/com/chooz/notification/domain/NotificationQueryRepository.java +++ b/src/main/java/com/chooz/notification/domain/NotificationQueryRepository.java @@ -17,6 +17,6 @@ public interface NotificationQueryRepository { Optional findUserByPostId(Long postId); Optional findPostById(Long postId); boolean existsByDedupKey(Long ReceiverId, String dedupKey); - List existsDedupKeyByNotifications(List notifications); + List findNotificationsByDedupKey(List notifications); List findVoteUsersByPostId(Long postId); } diff --git a/src/main/java/com/chooz/notification/persistence/NotificationQueryDslRepository.java b/src/main/java/com/chooz/notification/persistence/NotificationQueryDslRepository.java index 0f39d55..9761b24 100644 --- a/src/main/java/com/chooz/notification/persistence/NotificationQueryDslRepository.java +++ b/src/main/java/com/chooz/notification/persistence/NotificationQueryDslRepository.java @@ -44,6 +44,7 @@ public Slice findNotifications(Long userId, Long cursor, Pageab notification.title, notification.content, notification.imageUrl, + notification.isValid, notification.isRead, notification.eventAt ) @@ -138,7 +139,7 @@ public boolean existsByDedupKey(Long receiverId, String dedupkey) { ).fetchFirst(); return one != null; } - public List existsDedupKeyByNotifications(List notifications) { + public List findNotificationsByDedupKey(List notifications) { BooleanBuilder builder = new BooleanBuilder(); for (Notification n : notifications) { builder.or( diff --git a/src/main/java/com/chooz/notification/persistence/NotificationQueryRepositoryImpl.java b/src/main/java/com/chooz/notification/persistence/NotificationQueryRepositoryImpl.java index fb3db09..dcd54fe 100644 --- a/src/main/java/com/chooz/notification/persistence/NotificationQueryRepositoryImpl.java +++ b/src/main/java/com/chooz/notification/persistence/NotificationQueryRepositoryImpl.java @@ -55,8 +55,8 @@ public boolean existsByDedupKey(Long ReceiverId, String dedupKey) { } @Override - public List existsDedupKeyByNotifications(List notifications) { - return notificationQueryDslRepository.existsDedupKeyByNotifications(notifications); + public List findNotificationsByDedupKey(List notifications) { + return notificationQueryDslRepository.findNotificationsByDedupKey(notifications); } @Override diff --git a/src/main/java/com/chooz/notification/presentation/dto/NotificationResponse.java b/src/main/java/com/chooz/notification/presentation/dto/NotificationResponse.java index 6169b9f..b17bd97 100644 --- a/src/main/java/com/chooz/notification/presentation/dto/NotificationResponse.java +++ b/src/main/java/com/chooz/notification/presentation/dto/NotificationResponse.java @@ -16,6 +16,7 @@ public record NotificationResponse ( String content, String imageUrl, List targets, + boolean isValid, boolean isRead, LocalDateTime eventAt )implements CursorDto{ @@ -28,6 +29,7 @@ public static NotificationResponse of (NotificationDto notificationDto){ notificationDto.notificationRowDto().content(), notificationDto.notificationRowDto().imageUrl(), List.copyOf(notificationDto.targets().stream().map(t -> Target.of(t.id(), t.type())).toList()), + notificationDto.notificationRowDto().isValid(), notificationDto.notificationRowDto().isRead(), notificationDto.notificationRowDto().eventAt() ); diff --git a/src/test/java/com/chooz/notification/application/NotificationQueryServiceTest.java b/src/test/java/com/chooz/notification/application/NotificationQueryServiceTest.java index 53be924..b776ebf 100644 --- a/src/test/java/com/chooz/notification/application/NotificationQueryServiceTest.java +++ b/src/test/java/com/chooz/notification/application/NotificationQueryServiceTest.java @@ -7,14 +7,17 @@ import com.chooz.notification.domain.NotificationType; import com.chooz.notification.domain.Target; import com.chooz.notification.domain.TargetType; +import com.chooz.notification.persistence.NotificationJpaRepository; import com.chooz.notification.presentation.dto.NotificationPresentResponse; import com.chooz.notification.presentation.dto.NotificationResponse; import com.chooz.support.IntegrationTest; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.transaction.AfterTransaction; import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -28,6 +31,14 @@ class NotificationQueryServiceTest extends IntegrationTest { @Autowired NotificationCommandService notificationCommandService; + @Autowired + NotificationJpaRepository notificationJpaRepository; + + @AfterTransaction + void clean() { + notificationJpaRepository.deleteAll(); + } + @Test @DisplayName("알림 조회") void notifications() throws Exception { @@ -65,7 +76,16 @@ void notifications() throws Exception { //then assertAll( - () -> assertThat(notifications.size()).isNotZero() + () -> assertThat(notifications.size()).isOne(), + () -> assertThat(notifications.getFirst().content()).isEqualTo(content), + () -> assertThat(notifications.getFirst().title()).isEqualTo(title), + () -> assertThat(notifications.getFirst().profileUrl()).isEqualTo(profileUrl), + () -> assertThat(notifications.getFirst().imageUrl()).isEqualTo(imageUrl), + () -> assertThat(notifications.getFirst().eventAt().truncatedTo(ChronoUnit.MICROS)) + .isEqualTo(eventAt.truncatedTo(ChronoUnit.MICROS)), + () -> assertThat(notifications.getFirst().isRead()).isEqualTo(false), + () -> assertThat(notifications.getFirst().isValid()).isEqualTo(true) + ); } @Test @@ -98,7 +118,6 @@ void present() throws Exception { //when notificationCommandService.create(notification); NotificationPresentResponse notificationPresentResponse = notificationQueryService.present(receiverId); - //then assertAll( () -> assertThat(notificationPresentResponse.present()).isTrue() diff --git a/src/test/java/com/chooz/notification/presentation/NotificationControllerTest.java b/src/test/java/com/chooz/notification/presentation/NotificationControllerTest.java index fc562d8..1cb944a 100644 --- a/src/test/java/com/chooz/notification/presentation/NotificationControllerTest.java +++ b/src/test/java/com/chooz/notification/presentation/NotificationControllerTest.java @@ -50,6 +50,7 @@ void findNotifications() throws Exception { "지금 바로 확인해보세요.", "https://cdn.chooz.site/images/20865b3c-4e2c-454a-81a1-9ca31bbaf77d", List.of(Target.of(1L, TargetType.POST)), + true, false, LocalDateTime.now() ) @@ -88,6 +89,8 @@ void findNotifications() throws Exception { .type(JsonFieldType.NUMBER).description("알림 타겟 ID"), fieldWithPath("data[].targets[].type") .type(JsonFieldType.STRING).description("알림 타겟 유형"), + fieldWithPath("data[].isValid") + .type(JsonFieldType.BOOLEAN).description("유효 알림 여부"), fieldWithPath("data[].isRead") .type(JsonFieldType.BOOLEAN).description("읽음 여부"), fieldWithPath("data[].eventAt") diff --git a/src/test/java/com/chooz/support/IntegrationTest.java b/src/test/java/com/chooz/support/IntegrationTest.java index c0f01dd..f20a8cb 100644 --- a/src/test/java/com/chooz/support/IntegrationTest.java +++ b/src/test/java/com/chooz/support/IntegrationTest.java @@ -1,9 +1,8 @@ package com.chooz.support; -import jakarta.transaction.Transactional; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.context.annotation.Profile; import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; @ActiveProfiles("test") @Transactional