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 @@ -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);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,4 +25,8 @@ public interface AlarmRepository extends JpaRepository<Alarm, Long> {
Optional<Alarm> findById(Long AlarmId);

long countByUserAndIsCheckedFalse(User user);

@Modifying
@Query("UPDATE Alarm alarm SET alarm.isChecked = true WHERE alarm.user = :user AND alarm.isChecked = false")
int markCheckedByUser(@Param("user") User user);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,4 +25,8 @@ List<UserAnnouncement> 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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ public BaseResponse<PatchAlarmResponse> patchAlarm(
return BaseResponse.ok(response);
}

@PatchMapping("/read-all")
public BaseResponse<Void> patchAllAlarm(@AuthenticationPrincipal final CustomUserDetails userDetails) {
alarmService.patchAllUserAlarm(userDetails);
return BaseResponse.ok();
}

@PostMapping("/direct")
public BaseResponse<Void> sendFcmMessage(@RequestBody DirectNotificationRequest request) {
FcmDirectDto fcmDirectDto = new FcmDirectDto(request.title(), request.body(), request.userIds());
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/config
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()
)));
}
}
Loading