Conversation
둘러보기책 등록 기능에 성공 상태 분기 처리 추가. 변경사항
시퀀스 다이어그램sequenceDiagram
participant User as 사용자
participant Presenter as BookSearchPresenter
participant UiState as BookSearchUiState
participant UI as BookSearchContent
participant BottomSheet as BookRegisterSuccessBottomSheet
User->>Presenter: 책 등록 (상태 선택)
Presenter->>Presenter: upsertBook 실행
alt 등록 성공
Presenter->>Presenter: upsertedBookStatus = selectedBookStatus
Presenter->>UiState: BookSearchUiState 업데이트
end
UiState->>UI: 상태 변경 감지
UI->>UI: upsertedBookStatus 확인
alt upsertedBookStatus != null
UI->>BottomSheet: 바텀시트 렌더링 (상태 전달)
BottomSheet->>BottomSheet: 상태별 UI 결정
alt BEFORE_READING
BottomSheet->>UI: 확인 버튼만 표시
else READING / COMPLETED
BottomSheet->>UI: 취소 및 확인 버튼 표시
end
end
User->>BottomSheet: 버튼 클릭
BottomSheet->>Presenter: 콜백 (닫기/확인)
Presenter->>UiState: upsertedBookStatus 초기화 (null)
코드 리뷰 예상 소요 시간🎯 2 (단순) | ⏱️ ~12분 상태 필드 추가와 조건부 렌더링이라는 명확한 패턴의 변경입니다. 각 파일의 수정이 일관되고 반복적이며, 새로운 복잡한 로직 없이 기존 구조 내 상태 분기 처리만 도입됩니다. 시
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt (1)
238-240: 상태 관리 개선 고려성공 bottom sheet를 닫을 때
upsertedBookStatus도 함께 초기화하는 것을 고려해보세요. 현재는 기능적으로 문제가 없지만, 오래된 상태 값이 메모리에 남아있게 됩니다.다음과 같이 개선할 수 있습니다:
is BookSearchUiEvent.OnBookRegisterSuccessBottomSheetDismiss -> { isBookRegisterSuccessBottomSheetVisible = false + upsertedBookStatus = null }
OnBookRegisterSuccessOkButtonClick와OnBookRegisterSuccessCancelButtonClick이벤트 핸들러에도 동일하게 적용하는 것이 좋습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt(3 hunks)feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt(1 hunks)feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt(1 hunks)feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt(6 hunks)feature/search/src/main/res/values/strings.xml(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-28T12:25:54.058Z
Learnt from: easyhooon
PR: YAPP-Github/Reed-Android#174
File: feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt:128-133
Timestamp: 2025-08-28T12:25:54.058Z
Learning: In BookSearchPresenter.kt, when a guest user tries to register a book and is redirected to login, the bottom sheet (isBookRegisterBottomSheetVisible) and selection state (selectedBookIsbn, selectedBookStatus) are intentionally kept open/preserved so that when the user returns from login, they can continue from where they left off without losing context.
Applied to files:
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.ktfeature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.ktfeature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.ktfeature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt
🧬 Code graph analysis (2)
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt (1)
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt (1)
BookRegisterSuccessBottomSheet(32-133)
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt (2)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt (1)
ReedButton(34-114)core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
ReedTheme(14-21)
⏰ 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: ci-build
🔇 Additional comments (10)
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUiState.kt (1)
34-34: LGTM!책 등록 성공 후 사용된 상태를 추적하기 위한
upsertedBookStatus필드 추가가 적절합니다.feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchPresenter.kt (3)
74-74: LGTM!책 등록 후 사용된 상태를 추적하기 위한
upsertedBookStatus상태 변수 추가가 적절합니다.
141-142: LGTM!책 등록 성공 후
upsertedBookStatus에 상태를 저장하고selectedBookStatus를 초기화하는 로직이 올바릅니다. 이를 통해 성공 bottom sheet에서 올바른 상태 기반 UI를 표시할 수 있습니다.
267-267: LGTM!UI state에
upsertedBookStatus를 포함시켜 하위 컴포넌트에서 사용할 수 있도록 한 것이 적절합니다.feature/search/src/main/res/values/strings.xml (1)
12-13: LGTM!각 독서 상태(읽기 전, 독서 완료)에 맞는 설명 텍스트와 버튼 레이블이 적절하게 추가되었습니다. 사용자에게 명확한 안내를 제공합니다.
Also applies to: 16-17
feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt (1)
268-286: LGTM!
state.upsertedBookStatus가 non-null일 때만 성공 bottom sheet를 렌더링하도록 한 것이 올바릅니다. null 안전성을 확보하면서upsertedBookStatus를 하위 컴포넌트에 전달합니다.feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookRegisterSuccessBottomSheet.kt (4)
37-37: LGTM!
upsertedBookStatus파라미터 추가로 등록된 책의 상태에 따라 동적으로 UI를 렌더링할 수 있게 되었습니다.modifier기본값 추가도 적절합니다.Also applies to: 40-40
73-79: LGTM!독서 상태에 따라 적절한 설명 텍스트를 선택하는 로직이 올바릅니다. 각 상태별로 사용자에게 명확한 안내를 제공합니다.
87-130: LGTM! PR 목표 달성독서 상태에 따른 버튼 분기 처리가 PR 목표와 정확히 일치합니다:
- BEFORE_READING: 단일 "확인" 버튼만 표시 (기록 남기기 버튼 숨김) ✅
- READING/COMPLETED: "나중에 하기"와 상태별 액션 버튼 표시
BEFORE_READING 상태에서 버튼 클릭 시
onCancelButtonClick을 호출하여 RecordScreen으로의 네비게이션 없이 bottom sheet만 닫는 것이 올바른 동작입니다.
138-196: LGTM!세 가지 독서 상태(읽기 전, 읽는 중, 독서 완료) 모두에 대한 Preview 함수를 추가하여 디자인 검토 시 각 상태별 UI를 확인할 수 있도록 한 것이 좋습니다.
🔗 관련 이슈
📙 작업 설명
🧪 테스트 내역 (선택)
📸 스크린샷 또는 시연 영상 (선택)
default.mp4
💬 추가 설명 or 리뷰 포인트 (선택)
Summary by CodeRabbit
릴리스 노트