Skip to content

Conversation

@david-parkk
Copy link
Contributor

@david-parkk david-parkk commented Dec 24, 2025

#️⃣ 연관된 이슈

closes #372

📝작업 내용

  • 알림 전부 읽기

작업 상세 내용

상세 내용을 입력해주세요.

💬리뷰 요구사항

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요.

Summary by CodeRabbit

  • New Features

    • 사용자가 모든 알림을 한 번에 "읽음"으로 표시할 수 있는 기능 추가 (일괄 읽음 처리 API 포함)
  • Tests

    • 일괄 읽음 기능에 대한 엔드투엔드 테스트 및 API 문서화를 위한 테스트 케이스 추가
  • Chores

    • 일부 구성 참조 업데이트 (내부 서브모듈 커밋 고정 정보 변경)

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link

coderabbitai bot commented Dec 24, 2025

Walkthrough

사용자의 모든 알림과 공지사항을 일괄로 읽음(isChecked=true) 처리하는 엔드포인트와 서비스/저장소 쿼리, 테스트 및 서브모듈 해시 업데이트가 추가되었습니다.

Changes

Cohort / File(s) 변경 요약
컨트롤러
src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java
PATCH /api/v1/alarm/read-all 엔드포인트 추가 — 인증된 사용자로 전체 알림 읽음 처리 호출
서비스
src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java
patchAllUserAlarm(CustomUserDetails) 메서드 추가 — User 조회 후 저장소의 일괄 체크 처리 호출
저장소(Alarm)
src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java
@Modifying markCheckedByUser(User user) 메서드 추가 — Alarm 테이블의 isChecked 업데이트 쿼리
저장소(UserAnnouncement)
src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java
@Modifying markCheckedByUser(User user) 메서드 추가 — UserAnnouncement 테이블의 isChecked 업데이트 쿼리
테스트
src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java
patchAllAlarm 테스트 추가 — 서비스 스텁, PATCH 요청 검증 및 REST Docs 스니펫 추가
설정(서브모듈)
src/main/resources/config
서브프로젝트 커밋 해시 업데이트(구성 변경)

Sequence Diagram(s)

sequenceDiagram
    participant Client as 클라이언트
    participant Controller as AlarmController
    participant Service as AlarmService
    participant UserSvc as UserService
    participant AlarmRepo as AlarmRepository
    participant AnnouncementRepo as UserAnnouncementRepository
    participant DB as 데이터베이스

    Client->>Controller: PATCH /api/v1/alarm/read-all\n(Authorization)
    Controller->>Service: patchAllUserAlarm(userDetails)
    Service->>UserSvc: getUser()
    UserSvc-->>Service: User

    rect rgb(220,240,255)
        Note over Service,AlarmRepo: 알림 일괄 읽음
        Service->>AlarmRepo: markCheckedByUser(user)
        AlarmRepo->>DB: UPDATE Alarm SET isChecked = true WHERE user = ?
        DB-->>AlarmRepo: 업데이트 결과

        Note over Service,AnnouncementRepo: 공지 일괄 읽음
        Service->>AnnouncementRepo: markCheckedByUser(user)
        AnnouncementRepo->>DB: UPDATE UserAnnouncement SET isChecked = true WHERE user = ?
        DB-->>AnnouncementRepo: 업데이트 결과
    end

    Service-->>Controller: (void)
    Controller-->>Client: 200 OK (BaseResponse<Void>)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20분

Possibly related PRs

  • [FEAT] 알림 확인 API #350 — 알림 도메인에서 isChecked 관련 기능을 수정/확장한 PR로, 전체 읽음 기능과 동일 영역을 변경함.

Suggested reviewers

  • kmw10693

Poem

🐰 알림들아, 이제 쉿,
한 번에 읽혀 편히 쉬어라,
서비스 뛰고 저장소 춤추며,
데이터는 부드럽게 변하네,
당근 하나로 정리 완료! 🥕

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Description check ❓ Inconclusive PR 설명은 템플릿의 필수 섹션을 포함하고 있으나, '작업 상세 내용' 섹션이 채워지지 않아 구현 세부사항이 부족합니다. 작업 상세 내용 섹션에 구현된 엔드포인트, 저장소 메서드 및 주요 변경사항에 대한 설명을 추가하세요.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목 '[Feat] 알림 전부 읽기'는 변경 사항의 주요 내용인 모든 알림을 읽음 처리하는 기능을 명확하게 요약합니다.
Linked Issues check ✅ Passed PR의 코드 변경사항이 이슈 #372의 '알림 전체 읽기' 요구사항을 충족합니다. 새로운 PATCH 엔드포인트와 저장소 메서드가 구현되었습니다.
Out of Scope Changes check ✅ Passed 모든 코드 변경사항이 알림 읽음 처리 기능 구현에 직접 관련되어 있으며, 링크된 이슈의 범위 내에 있습니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/#372

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fe2752f and df9d205.

📒 Files selected for processing (1)
  • src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java (1)

170-175: 트랜잭션 처리가 올바르게 구현되었습니다.

@Transactional 어노테이션이 적용되어 있어 두 저장소 업데이트가 원자적으로 처리됩니다. 로직이 명확하고 구현이 정확합니다.

📊 관찰성 개선을 위한 선택적 제안

저장소 메서드가 반환하는 업데이트된 행 수를 로깅하면 운영 중 모니터링에 도움이 될 수 있습니다.

 @Transactional
 public void patchAllUserAlarm(CustomUserDetails userDetails) {
     User user = userService.getUser();
-    userAnnouncementRepository.markCheckedByUser(user);
-    alarmRepository.markCheckedByUser(user);
+    int announcementCount = userAnnouncementRepository.markCheckedByUser(user);
+    int alarmCount = alarmRepository.markCheckedByUser(user);
+    log.info("Marked {} announcements and {} alarms as checked for user {}", 
+             announcementCount, alarmCount, user.getId());
 }
src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java (1)

282-309: 테스트 커버리지가 적절하게 추가되었습니다.

새로운 엔드포인트에 대한 테스트가 올바르게 작성되었으며, REST Docs 문서화도 포함되어 있습니다. 컨트롤러 계층 테스트로서 충분합니다.

🧪 선택적 개선 사항

서비스 메서드 호출 여부를 명시적으로 검증하면 테스트가 더 견고해집니다.

 mockMvc.perform(patch("/api/v1/alarm/read-all")
                 .header("Authorization", "Bearer test-access-token"))
         // then
         .andDo(print())
-        .andExpect(status().isOk())
+        .andExpect(status().isOk());
+
+verify(alarmService, times(1)).patchAllUserAlarm(any());
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9cef170 and fe2752f.

📒 Files selected for processing (6)
  • src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java
  • src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java
  • src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java
  • src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java
  • src/main/resources/config
  • src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build
🔇 Additional comments (3)
src/main/resources/config (1)

1-1: 구현 파일이 제공되지 않았습니다.

서브모듈 참조 업데이트만 제공되었으며, PR 요약에 언급된 실제 기능 구현 파일들(AlarmService, AlarmRepository, UserAnnouncementRepository, AlarmController, AlarmControllerTest)이 검토 대상에 포함되지 않았습니다.

완전한 코드 리뷰를 위해 다음 파일들의 검토를 요청합니다:

  • src/main/java/ku_rum/backend/domain/alarm/application/AlarmService.java
  • src/main/java/ku_rum/backend/domain/alarm/domain/repository/AlarmRepository.java
  • src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java
  • src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java
  • src/test/java/ku_rum/backend/domain/alarm/presentation/AlarmControllerTest.java
src/main/java/ku_rum/backend/domain/alarm/presentation/AlarmController.java (1)

54-58: 새로운 엔드포인트 구현이 적절합니다.

/read-all 엔드포인트가 올바르게 구현되었습니다. 인증 처리와 서비스 위임이 적절하며, HTTP PATCH 메서드 사용도 RESTful 관례에 부합합니다.

src/main/java/ku_rum/backend/domain/alarm/domain/repository/UserAnnouncementRepository.java (1)

29-31: 업데이트 쿼리가 올바르게 구현되었습니다.

@Modifying 어노테이션과 함께 사용된 벌크 업데이트 쿼리가 정확하며, 별칭 명명도 적절합니다. 사용자별 공지사항을 효율적으로 일괄 업데이트합니다.

@github-actions
Copy link

github-actions bot commented Dec 24, 2025

Test Results

 38 files   38 suites   11s ⏱️
156 tests 156 ✅ 0 💤 0 ❌
157 runs  157 ✅ 0 💤 0 ❌

Results for commit df9d205.

♻️ This comment has been updated with latest results.

Copy link
Contributor

@kmw10693 kmw10693 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

굿 고생하셨습니다

@kmw10693 kmw10693 merged commit 1170b7c into develop Dec 24, 2025
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

알림 전체 읽기

3 participants