Skip to content

Conversation

@rbqks529
Copy link
Collaborator

@rbqks529 rbqks529 commented Oct 14, 2025

➕ 이슈 링크


🔎 작업 내용

  • 미확인 알림 여부 확인 api 연결
  • 기존의 알림 여부 확인 로직 수정

📸 스크린샷

  • 피드
스크린샷 2025-10-14 오후 4 50 15
  • 그룹
스크린샷 2025-10-14 오후 4 50 45

😢 해결하지 못한 과제

  • [] TASK


📢 리뷰어들에게

  • 참고해야 할 사항들을 적어주세요

Summary by CodeRabbit

  • 신규 기능

    • 서버 기반의 “읽지 않은 알림 존재 여부” 확인을 도입하여 앱 전역에서 상태를 표시합니다.
  • 개선

    • 피드/그룹 화면에서 탭 재선택·당겨서 새로고침 시 읽지 않은 알림 상태를 즉시 갱신합니다.
    • 앱 시작 및 알림 상태 변경 후에도 읽지 않은 알림 상태가 자동 동기화됩니다.
    • 배지/아이콘 등 알림 표시의 정확도를 높였습니다.

@coderabbitai
Copy link

coderabbitai bot commented Oct 14, 2025

Walkthrough

미확인 알림 존재 여부를 확인하는 신규 API를 연동했다. 응답 DTO 추가, 서비스/레포지토리 메서드 추가, AlarmUiState에 불리언 플래그 도입, AlarmViewModel에 검사 함수 추가 및 초기화/갱신 시 호출, Feed/Group 화면에서 해당 검사 호출로 교체했다.

Changes

Cohort / File(s) Summary
API 모델/서비스 추가
app/src/main/java/com/texthip/thip/data/model/notification/response/NotificationExistsUncheckedResponse.kt, app/src/main/java/com/texthip/thip/data/service/NotificationService.kt
신규 DTO NotificationExistsUncheckedResponse(exists: Boolean) 추가. NotificationService에 GET notifications/exists-unchecked 호출 existsUncheckedNotifications() 추가(반환: BaseResponse<NotificationExistsUncheckedResponse>).
레포지토리 연동
app/src/main/java/com/texthip/thip/data/repository/NotificationRepository.kt
existsUncheckedNotifications() 추가. 서비스 호출을 handleBaseResponse()로 감싸고 getOrNull()로 결과 추출하여 Result<NotificationExistsUncheckedResponse?> 반환.
알람 상태/뷰모델 로직
app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmUiState.kt, app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmViewModel.kt
AlarmUiStatehasUnreadNotifications: Boolean 생성자 프로퍼티 추가 및 기존 파생 프로퍼티 제거. AlarmViewModelcheckUnreadNotifications() 추가하고 초기화/알림 업데이트/새로고침 흐름에서 호출하도록 통합.
화면 호출 교체
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt, app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt
기존 refreshData() 호출을 checkUnreadNotifications() 호출로 교체(바텀탭 재선택, 풀투리프레시, 초기 데이터 갱신 시).

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor U as 사용자
  participant F as Feed/Group 화면
  participant VM as AlarmViewModel
  participant R as NotificationRepository
  participant S as NotificationService
  participant API as Backend API

  U->>F: 탭 재선택/새로고침
  F->>VM: checkUnreadNotifications()
  VM->>R: existsUncheckedNotifications()
  R->>S: existsUncheckedNotifications()
  S->>API: GET /notifications/exists-unchecked
  API-->>S: BaseResponse{ data: { exists } }
  S-->>R: BaseResponse<NotificationExistsUncheckedResponse>
  R-->>VM: Result<NotificationExistsUncheckedResponse?>
  VM->>VM: uiState.copy(hasUnreadNotifications = data.exists)
  VM-->>F: 상태 업데이트
  note right of VM: 실패 시 error 갱신, 기존 상태 유지
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested labels

🎨 UI, 🍀 refactor

Suggested reviewers

  • Nico1eKim

Poem

퓨어퓨어 발자국, 토끼는 깡총깡총
아직 못 본 알림 있나요? 귀가 쫑긋 종종!
체크 한 번, 플래그 반짝—true면 꼬리 살랑
화면은 살포시 갱신되고,
알림 숲엔 평온함이 다시 솔솔~ 🐇✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
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.
✅ Passed checks (4 passed)
Check name Status Explanation
Title Check ✅ Passed PR 제목은 미확인 알림 여부 확인 API 연결이라는 주요 변경 사항을 명확히 요약하고 있어 간결하면서도 의도를 잘 전달합니다.
Linked Issues Check ✅ Passed 이 PR은 145번 이슈에서 요구한 미확인 알림 확인용 API 연동을 데이터 모델, 서비스, 리포지토리, 뷰모델 및 화면 로직 전반에 걸쳐 일관되게 구현하여 목적을 충실히 달성하고 있습니다.
Out of Scope Changes Check ✅ Passed PR 변경 내용이 미확인 알림 여부 확인 API 연동과 관련된 코드로 한정되어 있으며 불필요한 범위 외 수정이 포함되지 않았습니다.
Description Check ✅ Passed PR 설명은 이슈 링크, 작업 내용, 스크린샷, 해결하지 못한 과제, 리뷰어 안내 섹션 등 템플릿에 명시된 모든 항목을 갖추고 있어 구조적으로 완전합니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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: 0

🧹 Nitpick comments (1)
app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmViewModel.kt (1)

167-182: 주석과 실제 동작이 일치하지 않습니다.

Line 178의 주석에는 "기존 상태 유지 (로그만 남김)"라고 명시되어 있지만, 실제로는 line 179에서 error 상태를 업데이트하고 있습니다.

주석을 다음과 같이 수정하는 것을 권장합니다:

-                // 에러 발생 시 기존 상태 유지 (로그만 남김)
-                updateState { it.copy(error = exception.message) }
+                // 에러 발생 시 hasUnreadNotifications는 유지하고 error만 업데이트
+                updateState { it.copy(error = exception.message) }

또는 주석대로 에러 상태만 로깅하고 UI 상태는 업데이트하지 않으려면:

-                // 에러 발생 시 기존 상태 유지 (로그만 남김)
-                updateState { it.copy(error = exception.message) }
+                // 에러 발생 시 기존 상태 유지
+                android.util.Log.e("AlarmViewModel", "Failed to check unread notifications", exception)
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 5b5996f and 363c9a8.

📒 Files selected for processing (7)
  • app/src/main/java/com/texthip/thip/data/model/notification/response/NotificationExistsUncheckedResponse.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/data/repository/NotificationRepository.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/data/service/NotificationService.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmUiState.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmViewModel.kt (4 hunks)
  • app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (2 hunks)
  • app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmViewModel.kt (1)
app/src/main/java/com/texthip/thip/ui/group/viewmodel/GroupViewModel.kt (1)
  • updateState (30-32)
🔇 Additional comments (9)
app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmUiState.kt (1)

12-13: LGTM! API에서 가져온 명시적 상태로 전환이 적절합니다.

기존의 알림 목록 기반 계산 프로퍼티에서 API 응답 기반의 명시적 상태로 변경한 것이 올바릅니다. 이를 통해 전체 알림 목록을 로드하지 않고도 미확인 알림 존재 여부를 효율적으로 확인할 수 있습니다.

app/src/main/java/com/texthip/thip/data/model/notification/response/NotificationExistsUncheckedResponse.kt (1)

1-9: LGTM! DTO 구조가 간결하고 올바릅니다.

미확인 알림 존재 여부를 나타내는 단일 Boolean 필드를 가진 간단한 응답 DTO입니다. 직렬화 어노테이션도 적절하게 설정되어 있습니다.

app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt (2)

67-67: LGTM! 효율적인 API 호출로 개선되었습니다.

전체 알림 데이터를 새로고침하는 대신 미확인 알림 존재 여부만 확인하도록 변경한 것이 적절합니다. 화면 진입 시 필요한 최소한의 데이터만 가져오는 효율적인 접근 방식입니다.


83-86: LGTM! Pull-to-refresh 시에도 일관된 패턴을 적용했습니다.

그룹 데이터 새로고침 시 알림 미확인 상태도 함께 업데이트하도록 구현한 것이 올바릅니다. checkUnreadNotifications() 사용으로 불필요한 알림 목록 로드 없이 상태만 효율적으로 갱신합니다.

app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (2)

227-227: LGTM! 바텀 네비게이션 재선택 시 효율적인 업데이트입니다.

탭 재선택 시 알림 목록 전체를 새로고침하는 대신 미확인 알림 존재 여부만 확인하도록 변경한 것이 적절합니다. 사용자 경험을 개선하면서도 불필요한 네트워크 요청을 줄였습니다.


291-291: LGTM! Pull-to-refresh에서도 일관된 패턴을 유지합니다.

피드 데이터 새로고침과 함께 알림 미확인 상태를 효율적으로 업데이트합니다. GroupScreen과 동일한 패턴을 사용하여 코드베이스의 일관성을 유지하고 있습니다.

app/src/main/java/com/texthip/thip/data/service/NotificationService.kt (1)

51-52: LGTM! RESTful 엔드포인트 정의가 올바릅니다.

미확인 알림 존재 여부를 확인하는 GET 엔드포인트가 적절하게 정의되었습니다. 경로명이 명확하고 Retrofit 규칙을 올바르게 따르고 있습니다.

app/src/main/java/com/texthip/thip/data/repository/NotificationRepository.kt (1)

113-118: LGTM! 기존 패턴을 일관되게 따릅니다.

새로운 레포지토리 메서드가 파일 내 다른 메서드들과 동일한 에러 핸들링 패턴을 사용합니다. runCatching, handleBaseResponse, getOrNull()을 통한 표준화된 접근 방식이 적절합니다.

app/src/main/java/com/texthip/thip/ui/common/alarmpage/viewmodel/AlarmViewModel.kt (1)

34-34: LGTM! 미확인 알림 상태를 적절한 시점에 동기화합니다.

checkUnreadNotifications() 호출이 다음과 같이 적절한 위치에 배치되어 상태를 최신으로 유지합니다:

  • 초기화 시 (line 34): 초기 상태 설정
  • 알림 읽음 처리 후 (line 40): 배지 상태 업데이트
  • 푸시 알림 수신 시 (line 47): 실시간 상태 반영
  • 수동 새로고침 시 (line 130): 일관성 보장

Also applies to: 40-40, 47-47, 130-130

@Nico1eKim Nico1eKim merged commit 8aedb16 into THIP-TextHip:develop Oct 24, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 알림 센터 추가 API 연결 [(THIP2025-367)]

2 participants