[Feat] 회원가입 api 수정#206
Hidden character warning
Conversation
📝 Walkthrough개요PR은 온보딩 흐름을 백엔드 약관 동적 로드, 검색 API 장르 필터링 추가, 가입 요청에 동의한 약관 ID 포함으로 확장합니다. 약관 API, 응답 DTO, 도메인 계층을 새로 추가하고 검색 API 응답 구조를 변경한 후 온보딩 화면을 리팩토링합니다. 변경 사항온보딩 약관 동의 및 검색 흐름 통합
예상 코드 검토 수고도🎯 4 (Complex) | ⏱️ ~60 분 관련 PR
제안 검토자
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 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: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/src/main/java/com/flint/domain/mapper/terms/TermsMapper.kt`:
- Around line 6-15: TermResponseDto.toModel에서 id.toLong()으로 강제 변환하면 숫자가 아닌 id(예:
UUID, 공백 등)에서 NumberFormatException이 발생하므로 TermResponseDto.toModel의 id 매핑을 안전하게
바꾸세요: TermResponseDto.toModel 함수의 id.toLong() 호출을 제거하고, 해결책으로는 TermModel의 id 타입을
String으로 일치시키거나 id.toLongOrNull()을 사용해 null/비정상 값에 대한 디폴트(예: null 허용, 0L 대체, 또는
명확한 에러 처리 및 로깅)로 방어 로직을 추가하여 런타임 예외를 막으세요.
In
`@app/src/main/java/com/flint/presentation/onboarding/OnboardingTermsScreen.kt`:
- Around line 180-182: The "자세히 보기" click handler is a no-op (onDetailClick = {
/* TODO */ }) so the CTA appears clickable but does nothing; update the
OnboardingTermsScreen call/site to either pass null for onDetailClick or an
explicit enabled=false flag and adjust the Terms item composable (the component
that renders the CTA) to hide or render the CTA as disabled when onDetailClick
is null/disabled. Concretely: change the caller to onDetailClick = null (or
onDetailEnabled = false), and modify the Terms CTA rendering logic to check for
a nullable lambda or enabled boolean and avoid showing a clickable link when not
provided.
In `@app/src/main/java/com/flint/presentation/onboarding/OnboardingViewModel.kt`:
- Around line 148-151: The search can suffer from race conditions because each
genre/keyword change calls getSearchContentList without cancelling prior
requests; fix by making searches cancellable (e.g., track a Job or use a Flow
with flatMapLatest) and cancel the previous search before starting a new one:
update the ViewModel to hold a nullable Job (or a MutableSharedFlow of
query+genre) and in the handler for _contentUiState changes cancel(searchJob) or
use flatMapLatest to ensure only the latest invocation of getSearchContentList
produces results; keep references to getSearchContentList, _contentUiState and
any coroutine scope (e.g., viewModelScope) to implement the
cancellation/flatMapLatest approach and apply the same change to the other
occurrence covering the same logic.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 25e73185-f6f6-480a-bbcd-ada8ba75182f
📒 Files selected for processing (19)
app/src/main/java/com/flint/data/api/SearchApi.ktapp/src/main/java/com/flint/data/api/TermsApi.ktapp/src/main/java/com/flint/data/di/ServiceModule.ktapp/src/main/java/com/flint/data/dto/auth/request/SignupRequestDto.ktapp/src/main/java/com/flint/data/dto/search/SearchContentsResponseDto.ktapp/src/main/java/com/flint/data/dto/terms/response/TermResponseDto.ktapp/src/main/java/com/flint/data/dto/terms/response/TermsListResponseDto.ktapp/src/main/java/com/flint/domain/mapper/auth/SignupMapper.ktapp/src/main/java/com/flint/domain/mapper/search/SearchContentMapper.ktapp/src/main/java/com/flint/domain/mapper/terms/TermsMapper.ktapp/src/main/java/com/flint/domain/model/auth/SignupModel.ktapp/src/main/java/com/flint/domain/model/terms/TermModel.ktapp/src/main/java/com/flint/domain/repository/SearchRepository.ktapp/src/main/java/com/flint/domain/repository/TermsRepository.ktapp/src/main/java/com/flint/presentation/onboarding/OnboardingContentScreen.ktapp/src/main/java/com/flint/presentation/onboarding/OnboardingTermsScreen.ktapp/src/main/java/com/flint/presentation/onboarding/OnboardingUiState.ktapp/src/main/java/com/flint/presentation/onboarding/OnboardingViewModel.ktapp/src/main/java/com/flint/presentation/onboarding/navigation/OnboardingNavigation.kt
| onDetailClick = { | ||
| // TODO: 노션 약관 링크 확정 후 내부 웹뷰로 열기 | ||
| }, |
There was a problem hiding this comment.
자세히 보기 액션이 현재 무동작으로 노출됩니다.
Line 181 TODO로 인해 클릭 가능한 텍스트가 실제로는 아무 동작을 하지 않습니다. 약관 화면에서는 오해를 줄이기 위해 링크 준비 전까지 비노출/비활성 처리하는 게 안전합니다.
원하시면 링크 미연결 시 CTA를 숨기거나 비활성화하도록 최소 수정안 만들어드릴게요.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@app/src/main/java/com/flint/presentation/onboarding/OnboardingTermsScreen.kt`
around lines 180 - 182, The "자세히 보기" click handler is a no-op (onDetailClick = {
/* TODO */ }) so the CTA appears clickable but does nothing; update the
OnboardingTermsScreen call/site to either pass null for onDetailClick or an
explicit enabled=false flag and adjust the Terms item composable (the component
that renders the CTA) to hide or render the CTA as disabled when onDetailClick
is null/disabled. Concretely: change the caller to onDetailClick = null (or
onDetailEnabled = false), and modify the Terms CTA rendering logic to check for
a nullable lambda or enabled boolean and avoid showing a clickable link when not
provided.
There was a problem hiding this comment.
@ckals413 알겠습니다! 링크 연결 시 자연스럽게 추가될 수 있도록 TODO 주석이 잘 남아있으니 참고해 주세요. 🙂
🧠 Learnings used
Learnt from: nahy-512
Repo: imflint/Flint-Android PR: 135
File: app/src/main/java/com/flint/domain/repository/AuthRepository.kt:1-22
Timestamp: 2026-01-19T00:48:44.889Z
Learning: Architect the Android app following Google's recommended Android App Architecture for this repo: place the data layer innermost, the domain layer can depend on the data layer, and avoid circular dependencies with other layers. For Kotlin files under app/src/main/java, ensure accompanying architecture aligns with this guidance (e.g., domain interfaces depending on data layer implementations or abstractions, not the other way around).
Learnt from: giovannijunseokim
Repo: imflint/Flint-Android PR: 153
File: app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailViewModel.kt:98-105
Timestamp: 2026-01-21T08:37:42.767Z
Learning: Guideline: For APIs like toggleContentBookmark that do not return a bookmarkCount, perform optimistic updates by updating the isBookmarked state on the client and compute bookmarkCount locally if needed. Do not rely on the server for the count; ensure the server response only conveys the boolean bookmarked state and synchronize this state accordingly. This applies to Kotlin Android ViewModels and related UI state management across files that handle similar bookmark toggle endpoints.
📮 관련 이슈
Flt 16 회원가입 api 수정
📌 작업 내용
📸 스크린샷
😅 미구현
🫛 To. 리뷰어
온보딩에서 장르 칩을 클릭해 정보를 가져오기 전에 다른 장르칩을 클릭하면 이전 요청이 취소되면서 OkHttp가 던지는 IOException을 NetworkErrorInterceptor가 실제 네트워크 오류로 잘못인식해
"문제가 발생했어요" 모달이 노출되는 문제가 있어서
chain.call().isCanceled() 체크를 추가해 의도적 취소는 에러 emit 없이 넘기도록 수정했습니당
Summary by CodeRabbit
릴리스 노트
New Features
Improvements