From 0d021afe4b95bf0717743e33543d1ad54605a9be Mon Sep 17 00:00:00 2001 From: david-parkk Date: Wed, 24 Dec 2025 14:15:19 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EC=84=9C=EB=B8=8C=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EC=B5=9C=EC=8B=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/config b/src/main/resources/config index b9a38aae..963495c4 160000 --- a/src/main/resources/config +++ b/src/main/resources/config @@ -1 +1 @@ -Subproject commit b9a38aae3b125092669fc3d9216c47acd765d8ea +Subproject commit 963495c41dce741c660957ec16da3727c9f41935 From 27c12b8c18ecb17dfbb685cafc2179862c75de3c Mon Sep 17 00:00:00 2001 From: david-parkk Date: Wed, 24 Dec 2025 14:32:47 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=EC=95=8C=EB=A6=BC=20=EC=A0=84?= =?UTF-8?q?=EB=B6=80=20=EC=9D=BD=EA=B8=B0=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/alarm/application/AlarmService.java | 7 +++++++ .../domain/alarm/domain/repository/AlarmRepository.java | 5 +++++ .../domain/repository/UserAnnouncementRepository.java | 5 +++++ .../backend/domain/alarm/presentation/AlarmController.java | 6 ++++++ 4 files changed, 23 insertions(+) diff --git a/src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java b/src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java index 9652936b..d45924ef 100644 --- a/src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java +++ b/src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java @@ -167,6 +167,13 @@ public GetAlarmDisableResponse findDisableAlarm(CustomUserDetails userDetails) { return GetAlarmDisableResponse.from(userDisabledAlarms); } + @Transactional + public void patchAllUserAlarm(CustomUserDetails userDetails) { + User user = userService.getUser(); + userAnnouncementRepository.markCheckedByUser(user); + alarmRepository.markCheckedByUser(user); + } + private PatchAlarmResponse patchAlarm(Long userId, Long alarmId) { Alarm alarm = findAlarmById(alarmId); diff --git a/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java b/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java index 2c54c7e6..81913158 100644 --- a/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java +++ b/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java @@ -6,6 +6,7 @@ import ku_rum.backend.domain.user.domain.User; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -24,4 +25,8 @@ public interface AlarmRepository extends JpaRepository { Optional findById(Long AlarmId); long countByUserAndIsCheckedFalse(User user); + + @Modifying + @Query("UPDATE Alarm ua SET ua.isChecked = true WHERE ua.user = :user AND ua.isChecked = false") + int markCheckedByUser(@Param("user") User user); } diff --git a/src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java b/src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java index 188a434b..8c27c553 100644 --- a/src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java +++ b/src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java @@ -5,6 +5,7 @@ import ku_rum.backend.domain.user.domain.User; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @@ -24,4 +25,8 @@ List findUserAnnouncement(@Param("user") User user, @Param("la Pageable pageable); long countByUserAndIsCheckedFalse(User user); + + @Modifying + @Query("UPDATE UserAnnouncement ua SET ua.isChecked = true WHERE ua.user = :user AND ua.isChecked = false") + int markCheckedByUser(@Param("user") User user); } diff --git a/src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java b/src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java index 46b5a26c..af4c8494 100644 --- a/src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java +++ b/src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java @@ -51,6 +51,12 @@ public BaseResponse patchAlarm( return BaseResponse.ok(response); } + @PatchMapping("/read-all") + public BaseResponse patchAllAlarm(@AuthenticationPrincipal final CustomUserDetails userDetails) { + alarmService.patchAllUserAlarm(userDetails); + return BaseResponse.ok(); + } + @PostMapping("/direct") public BaseResponse sendFcmMessage(@RequestBody DirectNotificationRequest request) { FcmDirectDto fcmDirectDto = new FcmDirectDto(request.title(), request.body(), request.userIds()); From fe2752f5b52610e620f59cd4e7ed5a5a78915479 Mon Sep 17 00:00:00 2001 From: david-parkk Date: Wed, 24 Dec 2025 14:41:55 +0900 Subject: [PATCH 3/4] =?UTF-8?q?test:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/AlarmControllerTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java b/src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java index 565189fa..94c9f1f7 100644 --- a/src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java +++ b/src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java @@ -4,6 +4,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.doNothing; import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; @@ -277,4 +278,33 @@ void getDisableAlarm() throws Exception { .build() ))); } + + @DisplayName("알림을 전부 읽는다") + @Test + void patchAllAlarm() throws Exception { + // given + + doNothing().when(alarmService).patchAllUserAlarm(any()); + + // when + mockMvc.perform(patch("/api/v1/alarm/read-all") + .header("Authorization", "Bearer test-access-token")) + // then + .andDo(print()) + .andExpect(status().isOk()) + .andDo(restDocs.document(resource( + ResourceSnippetParameters.builder() + .tag("알림 조회 API") + .description("알림을 전부 확인한다") + .requestHeaders( + headerWithName("Authorization").description("발급 받은 액세스 토큰입니다.") + ) + .responseFields( + fieldWithPath("code").description("응답 코드"), + fieldWithPath("status").description("응답 상태"), + fieldWithPath("message").description("응답 메시지") + ) + .build() + ))); + } } From df9d205f4cdd3105166afbbb10d03394bfb56fc2 Mon Sep 17 00:00:00 2001 From: david-parkk Date: Wed, 24 Dec 2025 14:54:08 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20query=20alias=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/domain/alarm/domain/repository/AlarmRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java b/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java index 81913158..049a7eab 100644 --- a/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java +++ b/src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java @@ -27,6 +27,6 @@ public interface AlarmRepository extends JpaRepository { long countByUserAndIsCheckedFalse(User user); @Modifying - @Query("UPDATE Alarm ua SET ua.isChecked = true WHERE ua.user = :user AND ua.isChecked = false") + @Query("UPDATE Alarm alarm SET alarm.isChecked = true WHERE alarm.user = :user AND alarm.isChecked = false") int markCheckedByUser(@Param("user") User user); }