Skip to content

Conversation

@88guri
Copy link
Contributor

@88guri 88guri commented Nov 18, 2025

📌 PR 요약

🌱 작업한 내용

  • 온보딩에 사용되는 user patch api 수정된거 반영
  • 자가동 바텀시트에 사용되는 api 수정된거 반영
  • 상단 여백 좁음 수정
  • 동네 설정 후 변경 불가 ->town 컴포 탭하여 다시 설정할 수 있게 수정
  • 서울 / 동네 텍스트 크기 오류 수정
  • 애플로그인 버튼 구글로그인 버튼으로 수정

🌱 PR 포인트

📸 스크린샷

Screen_recording_20251118_192755.mp4

📮 관련 이슈

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 온보딩 프로세스에 정책 동의 화면 추가 (총 4단계로 확대)
    • Google 소셜 로그인 옵션 추가
  • UI 개선

    • 로그인 화면 레이아웃 조정
    • Apple 로그인을 Google 로그인으로 변경
    • 지역 선택 화면 개선
  • 리팩토링

    • 정책 동의 정보 데이터 구조 개선
    • 지역/도시 관리 시스템 최적화

@88guri 88guri self-assigned this Nov 18, 2025
@88guri 88guri added the 시현🥐🐟 빵빠라빵빵빵빵빵 쾁쾁쾁 label Nov 18, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 18, 2025

Walkthrough

온보딩 및 OAuth 플로우를 통합하여 Google 로그인 옵션으로 변경하고, 정책 동의 데이터를 추가하며, 마을 엔티티 구조를 평탄화(ParentTownEntity/SubTownEntity)하고, 상태 기반 관리로 AllowClauseScreen을 리팩토링합니다.

Changes

비고 / 파일 변경 내용
Google 로그인 리소스
core/designsystem/src/main/res/drawable/ic_google_logo.xml, feature/oauth/src/main/res/values/strings.xml
Google 로고 벡터 드로어블 추가; Apple 로그인 문자열을 Google 로그인으로 대체
OAuth 화면 UI 업데이트
feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt
상단 여백 115dp→180dp 확대; 보조 로그인 버튼 Apple에서 Google로 변경 (배경색 검정→흰색, 텍스트색 흰색→검정)
정책 동의 DTO 및 엔티티
data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PolicyAgreementInfoDto.kt, domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/PolicyAgreementInfoEntity.kt
새로운 PolicyAgreementInfoDto, PolicyAgreementInfoEntity 추가 (policyId, isAgree 필드 포함)
정책 동의 매퍼
data/onboarding/src/main/java/com/teamsolply/solply/onboarding/mapper/PolicyAgreementInfoMapper.kt
PolicyAgreementInfoEntity.toDto() 확장 함수 추가
마을 엔티티 및 응답 DTO 리팩토링
domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/TownEntity.kt, data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/GetAllTownResponseDto.kt
TownEntity: towns → parentTowns로 변경; SubTownEntity 재설계 (중첩 구조 제거, townId/townName만 유지); TownDto에 parentTownId 필드 추가
마을 매퍼 업데이트
data/onboarding/src/main/java/com/teamsolply/solply/onboarding/mapper/TownEntitiyMapper.kt
ParentTownEntity 매핑 로직 추가; TownDto.toSubEntity() 단순화; GetAllTownResponseDto.toEntity()에서 parentTowns 그룹화 처리
PatchUserInfo 요청 DTO 및 저장소
data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PatchUserInfoRequestDto.kt, data/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepositoryImpl.kt
favoriteTownIdList 제거, policyAgreementInfos 추가; patchUserInfo() 메서드 서명 업데이트
도메인 저장소 인터페이스
domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepository.kt
patchUserInfo() 메서드: favoriteTownIdList 제거, nickname/policyAgreementInfos 매개변수 추가
온보딩 상태 및 계약
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt
totalPageCount 3→4 변경; TownEntity 초기화 업데이트; agree14, agreeService, agreePrivacy 불린 필드 추가; 정책 동의 변경 인텐트(ChangeAgree14, ChangeAgreeService, ChangeAgreePrivacy) 추가
온보딩 뷰모델
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt
정책 동의 인텐트 핸들러 추가; patchUserInfo() 호출 시 policyAgreementInfos 전달
정책 동의 화면 리팩토링
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/AllowClauseScreen.kt
로컬 상태 관리(mutableStateOf)에서 상태 기반 접근(state.agree14 등)으로 전환; 인텐트 기반 업데이트로 변경
마을 선택 화면 업데이트
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectTownScreen.kt
데이터 소스: subTowns → parentTowns로 변경; ParentTownEntity/SubTownEntity 구조 반영; 지역 텍스트 크기 14M→16M 조정

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant AllowClauseScreen as AllowClauseScreen<br/>(UI)
    participant OnBoardingViewModel as OnBoardingViewModel
    participant OnBoardingRepository as OnBoardingRepository
    participant API as Backend API

    User->>AllowClauseScreen: 정책 항목 클릭/전체 동의
    AllowClauseScreen->>OnBoardingViewModel: ChangeAgree14/Service/Privacy<br/>(인텐트 발행)
    OnBoardingViewModel->>OnBoardingViewModel: 상태 업데이트<br/>(agree14/agreeService/<br/>agreePrivacy)
    AllowClauseScreen->>AllowClauseScreen: 상태 반영하여 UI 업데이트
    
    User->>AllowClauseScreen: "다음" 버튼 클릭
    AllowClauseScreen->>OnBoardingViewModel: onNextClick()
    OnBoardingViewModel->>OnBoardingViewModel: PolicyAgreementInfoEntity 리스트 생성<br/>(policyId: 1,2,3 +<br/>현재 동의 상태)
    OnBoardingViewModel->>OnBoardingRepository: patchUserInfo()<br/>(policyAgreementInfos 포함)
    OnBoardingRepository->>OnBoardingRepository: policyAgreementInfos.map<br/>{ it.toDto() }
    OnBoardingRepository->>API: PATCH /user/info<br/>(PatchUserInfoRequestDto)
    API-->>OnBoardingRepository: UserInfoEntity
    OnBoardingRepository-->>OnBoardingViewModel: Result<UserInfoEntity>
    OnBoardingViewModel->>OnBoardingViewModel: isOnBoardingSuccess = true
Loading
sequenceDiagram
    participant API as Backend API
    participant TownEntitiyMapper as TownEntitiyMapper
    participant SelectTownScreen as SelectTownScreen<br/>(UI)

    API-->>TownEntitiyMapper: GetAllTownResponseDto<br/>(towns with parentTownId)
    TownEntitiyMapper->>TownEntitiyMapper: 필터: parentTownId==null<br/>→ parentTowns 리스트 생성
    TownEntitiyMapper->>TownEntitiyMapper: 그룹화: parentTownId별로<br/>SubTownEntity 정렬
    TownEntitiyMapper-->>SelectTownScreen: TownEntity<br/>(parentTowns: List<ParentTownEntity>)
    SelectTownScreen->>SelectTownScreen: 좌측 지역 목록: ParentTownEntity
    SelectTownScreen->>SelectTownScreen: 우측 마을 목록: 선택된<br/>ParentTownEntity.subTowns
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • 주의 필요 영역:
    • 마을 엔티티 구조 변경(TownEntity/ParentTownEntity/SubTownEntity)에 따른 매퍼 로직의 정확성 검증, 특히 GetAllTownResponseDto.toEntity()의 parentTowns 그룹화 처리 확인 필요
    • PatchUserInfoRequestDto의 메서드 서명 변경(favoriteTownIdList 제거 → policyAgreementInfos 추가)이 호출처 모두에서 일관성 있게 반영되었는지 확인
    • AllowClauseScreen의 상태 기반 리팩토링이 올바른 인텐트 디스패칭을 통해 상태 업데이트를 수행하는지 확인
    • SelectTownScreen의 parentTowns 접근 로직과 이전 subTowns 기반 로직의 동작 차이 검증

Possibly related PRs

Suggested labels

ui🎃, onboarding, refactoring

Suggested reviewers

  • ImHyungsuk
  • nagaeng
  • leeseokchan00

Poem

🐰 로그인 화면, Google 로고 반짝반짝
마을 선택은 나무 구조로 깔끔하게
정책 동의는 체크박스 셋, 상태 흘러흘러
온보딩 페이지 넷이 되어 뛰뛰뛰뛰
QA 피드백 반영해 완성도 UP! ✨

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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 PR의 주요 변경사항을 명확하게 요약하고 있습니다. QA2 반영 및 API 변경사항이라는 핵심 내용이 잘 드러나 있습니다.
Linked Issues check ✅ Passed PR의 코드 변경사항들이 #156 이슈의 체크리스트 항목들을 충족합니다. 로그인 화면 상단 여백, 동네 설정 재변경, 텍스트 크기 수정이 모두 포함되어 있습니다.
Out of Scope Changes check ✅ Passed 모든 코드 변경사항이 #156 이슈의 목표 범위 내에 있습니다. Google 로고 추가, 정책 동의 DTO 추가, 동네 엔티티 구조 변경 등 모두 연관된 기능 구현과 API 변경사항 반영입니다.
✨ 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 feature/#156-firsr-qa

Tip

📝 Customizable high-level summaries are now available in beta!

You can now customize how CodeRabbit generates the high-level summary in your pull requests — including its content, structure, tone, and formatting.

  • Provide your own instructions using the high_level_summary_instructions setting.
  • Format the summary however you like (bullet lists, tables, multi-section layouts, contributor stats, etc.).
  • Use high_level_summary_in_walkthrough to move the summary from the description to the walkthrough section.

Example instruction:

"Divide the high-level summary into five sections:

  1. 📝 Description — Summarize the main change in 50–60 words, explaining what was done.
  2. 📓 References — List relevant issues, discussions, documentation, or related PRs.
  3. 📦 Dependencies & Requirements — Mention any new/updated dependencies, environment variable changes, or configuration updates.
  4. 📊 Contributor Summary — Include a Markdown table showing contributions:
    | Contributor | Lines Added | Lines Removed | Files Changed |
  5. ✔️ Additional Notes — Add any extra reviewer context.
    Keep each section concise (under 200 words) and use bullet or numbered lists for clarity."

Note: This feature is currently in beta for Pro-tier users, and pricing will be announced later.


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
Contributor

@leeseokchan00 leeseokchan00 left a comment

Choose a reason for hiding this comment

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

good

@88guri 88guri merged commit db6473b into develop Nov 18, 2025
1 check was pending
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (1)

148-177: 치명적 버그: Google 로그인 버튼이 Kakao 로그인 핸들러를 호출합니다

Line 160의 onClick 핸들러가 kakaoLoginClick()을 호출하고 있어, 사용자가 Google 로그인 버튼을 탭해도 Kakao 로그인 플로우가 실행됩니다. Google 로그인을 위한 별도의 핸들러가 필요합니다.

다음과 같이 수정하세요:

 @Composable
 fun OauthScreen(
     kakaoLoginClick: () -> Unit,
+    googleLoginClick: () -> Unit,
     modifier: Modifier = Modifier
 ) {
         Row(
             modifier = Modifier
                 .fillMaxWidth()
                 .height(52.dp)
                 .padding(start = 20.dp, end = 20.dp)
                 .background(
                     color = SolplyTheme.colors.white,
                     shape = RoundedCornerShape(12.dp)
                 )
                 .customClickable(
                     rippleEnabled = false
                 ) {
-                    kakaoLoginClick()
+                    googleLoginClick()
                 },

그리고 OauthRoute에서도 해당 파라미터를 전달하도록 업데이트해야 합니다.

🧹 Nitpick comments (2)
feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (1)

167-167: contentDescription 문자열 현지화 권장

접근성 향상을 위해 하드코딩된 contentDescription을 문자열 리소스로 추출하는 것이 좋습니다.

             Icon(
                 painter = painterResource(R.drawable.ic_google_logo),
-                contentDescription = "google_logo",
+                contentDescription = stringResource(R.string.google_logo_description),
                 tint = Color.Unspecified,
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (1)

134-138: 하드코딩된 정책 ID를 상수로 관리 권장

정책 ID가 하드코딩되어 있어 유지보수가 어렵고 오류 가능성이 있습니다. 상수나 enum으로 관리하는 것을 권장합니다.

다음과 같이 리팩토링할 수 있습니다:

companion object 또는 별도의 상수 파일에 추가:

object PolicyIds {
    const val POLICY_AGE_14 = 1L
    const val POLICY_SERVICE = 2L
    const val POLICY_PRIVACY = 3L
}

그 다음 사용 부분 수정:

-                    val policyInfos = listOf(
-                        PolicyAgreementInfoEntity(1, uiState.value.agree14),
-                        PolicyAgreementInfoEntity(2, uiState.value.agreeService),
-                        PolicyAgreementInfoEntity(3, uiState.value.agreePrivacy)
-                    )
+                    val policyInfos = listOf(
+                        PolicyAgreementInfoEntity(PolicyIds.POLICY_AGE_14, uiState.value.agree14),
+                        PolicyAgreementInfoEntity(PolicyIds.POLICY_SERVICE, uiState.value.agreeService),
+                        PolicyAgreementInfoEntity(PolicyIds.POLICY_PRIVACY, uiState.value.agreePrivacy)
+                    )
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6313090 and 8ded000.

📒 Files selected for processing (16)
  • core/designsystem/src/main/res/drawable/ic_google_logo.xml (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PatchUserInfoRequestDto.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PolicyAgreementInfoDto.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/GetAllTownResponseDto.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/mapper/PolicyAgreementInfoMapper.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/mapper/TownEntitiyMapper.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepositoryImpl.kt (2 hunks)
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/PolicyAgreementInfoEntity.kt (1 hunks)
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/TownEntity.kt (1 hunks)
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepository.kt (2 hunks)
  • feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (3 hunks)
  • feature/oauth/src/main/res/values/strings.xml (1 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt (2 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (3 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/AllowClauseScreen.kt (4 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectTownScreen.kt (6 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (1)
core/ui/src/main/java/com/teamsolply/solply/ui/base/BaseViewModel.kt (1)
  • reduce (44-46)
🔇 Additional comments (27)
feature/oauth/src/main/res/values/strings.xml (1)

4-4: Apple 로그인에서 Google 로그인으로 변경 완료

리소스 문자열이 올바르게 업데이트되었습니다.

core/designsystem/src/main/res/drawable/ic_google_logo.xml (1)

1-22: Google 로고 리소스가 올바르게 추가되었습니다

벡터 드로어블이 Google 브랜드 색상을 사용하고 있으며, 크기와 구조가 적절합니다.

feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (2)

85-85: 상단 여백 수정이 올바르게 적용되었습니다

PR 목표에 명시된 "앱 로그인 메인 화면 상단 여백 좁음" 이슈가 115.dp에서 180.dp로 수정되어 해결되었습니다.


154-154: Google 로그인 버튼 스타일링이 적절하게 적용되었습니다

배경색을 흰색으로, 텍스트 색상을 검은색으로 변경하고 Google 로고를 사용하는 것이 Google 브랜드 가이드라인에 부합합니다.

Also applies to: 166-166, 173-175

domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/PolicyAgreementInfoEntity.kt (1)

3-6: LGTM!

정책 동의 정보를 담는 엔티티 구조가 명확하고 간결합니다. 불변 속성을 사용하여 데이터의 안정성을 보장하고 있습니다.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/GetAllTownResponseDto.kt (1)

18-19: LGTM!

상위 동네 참조를 위한 parentTownId 필드가 적절하게 추가되었습니다. nullable 타입과 기본값 null을 사용하여 하위 호환성을 보장하고 있습니다.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PolicyAgreementInfoDto.kt (1)

6-13: LGTM!

정책 동의 정보 DTO가 올바르게 정의되어 있습니다. kotlinx.serialization 어노테이션이 적절히 적용되어 JSON 직렬화를 지원합니다.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/mapper/PolicyAgreementInfoMapper.kt (1)

6-10: LGTM!

엔티티를 DTO로 변환하는 매퍼 함수가 명확하게 구현되어 있습니다. 확장 함수 패턴을 사용하여 코드 가독성이 좋습니다.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/mapper/TownEntitiyMapper.kt (3)

32-38: LGTM!

ParentTownEntity로의 변환 로직이 명확합니다. nullable subTowns를 적절히 처리하고 있습니다.


40-45: LGTM!

SubTownEntity로의 변환이 단순화되었습니다. 2단계 계층 구조(부모/자식)에 맞게 중첩된 subTowns 처리를 제거한 것이 적절합니다.


9-30: API 응답이 고아 동네(부모 없는 자식)를 포함할 수 있으면 현재 구현에서 조용히 제외됩니다

현재 코드는 parentTownId == null인 동네만 부모로 필터링하고, 각 부모의 자식을 parentTownId == parent.townId로 찾습니다. 만약 API가 부모 ID는 있지만 해당 부모가 목록에 없는 "고아 동네"를 반환한다면, 이들은 자동으로 손실됩니다.

확인 필요: 백엔드 API가 항상 일관된 부모-자식 관계를 보장하는지, 아니면 이러한 손실이 의도된 설계인지 명확히 해주세요.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectTownScreen.kt (4)

81-84: LGTM!

새로운 ParentTownEntity 구조에 맞게 선택된 동네 이름을 조회하는 로직이 올바르게 수정되었습니다. flatMap을 사용하여 모든 부모의 자식 동네들을 평탄화하는 방식이 적절합니다.


85-87: QA 피드백 반영 확인!

선택된 동네를 탭하면 바텀시트를 다시 열어 재설정할 수 있도록 개선되었습니다. PR 목표에 명시된 QA 수정사항이 올바르게 반영되었습니다.


178-232: QA 피드백 반영 확인!

LeftRegionPaneParentTownEntity 구조를 사용하도록 올바르게 업데이트되었습니다. 또한 지역 텍스트 타이포그래피가 body14M에서 body16M으로 변경되어 PR에서 언급된 "서울 / 동네 텍스트 크기 오류"가 수정되었습니다.


128-133: LGTM!

선택된 지역의 하위 동네 목록을 가져오는 로직이 ParentTownEntity 구조에 맞게 올바르게 수정되었습니다. 부모를 찾지 못한 경우 emptyList()로 안전하게 처리하고 있습니다.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/AllowClauseScreen.kt (3)

36-39: LGTM! 상태 관리 개선

로컬 Compose 상태 대신 state 파라미터에서 동의 정보를 읽도록 리팩토링되었습니다. 이는 단일 진실 공급원(single source of truth) 원칙을 따르며, 상태 관리가 더 명확해졌습니다.


69-74: LGTM! Intent 기반 상태 업데이트

전체 동의 토글 시 각 동의 항목에 대한 별도 Intent를 발행하도록 변경되었습니다. 이는 단방향 데이터 흐름 패턴을 올바르게 따르고 있으며, ViewModel에서 상태 변경을 중앙 집중식으로 관리할 수 있게 합니다.


107-109: LGTM! 일관된 Intent 패턴

각 동의 항목 클릭 시 일관된 Intent 패턴을 사용하여 상태를 업데이트하도록 변경되었습니다. 코드의 일관성과 유지보수성이 향상되었습니다.

Also applies to: 115-117, 127-129

domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepository.kt (1)

12-17: 코드 변경사항 검증 완료 - 승인

호출부 검증 결과, 모든 계층에서 patchUserInfo 메서드 시그니처가 올바르게 업데이트되었습니다:

  • OnBoardingViewModel (140-145행): 새로운 시그니처에 맞게 모든 파라미터(selectedTownId, persona, nickname, policyAgreementInfos) 전달
  • OnBoardingRepositoryImpl (32-37행): 도메인 인터페이스와 정확히 일치
  • ✅ 데이터 변환 계층: 파라미터를 PatchUserInfoRequestDto로 적절히 매핑
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt (3)

27-29: 약관 동의 필드 추가 확인

세 가지 약관 동의 필드가 추가되었습니다. 구현이 깔끔합니다.


47-49: 약관 동의 Intent 추가 확인

약관 동의 상태 변경을 위한 Intent가 적절하게 추가되었습니다.


11-11: totalPageCount = 4 확인 완료

온보딩 화면이 4개 페이지(인덱스 0-3)로 구성되어 있으며, totalPageCount = 4가 UI 구조와 일치합니다. 변경사항이 올바릅니다.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (2)

87-97: 약관 동의 Intent 처리 확인

약관 동의 상태를 업데이트하는 로직이 올바르게 구현되었습니다.


129-151: 필수 약관 동의 검증 누락 확인 필요

사용자가 필수 약관에 동의하지 않은 상태에서도 patchUserInfo가 호출될 수 있습니다. 필수 약관 동의 여부를 확인하는 로직이 필요한지 검토해주세요.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepositoryImpl.kt (1)

32-53: API 변경사항이 올바르게 반영됨

favoriteTownIdList가 제거되고 nickname과 policyAgreementInfos가 추가되었습니다. 매핑 로직도 올바르게 구현되었습니다.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PatchUserInfoRequestDto.kt (1)

7-19: DTO 변경사항이 올바르게 반영됨

API 변경사항에 맞춰 favoriteTownIdList가 제거되고 policyAgreementInfos가 추가되었습니다. 직렬화 어노테이션도 올바릅니다.

domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/TownEntity.kt (1)

3-16: Town 엔티티 구조 개선

평면 구조에서 계층적 구조(ParentTownEntity/SubTownEntity)로 변경되었습니다. API 변경사항이 잘 반영되었고, 도메인 모델이 더 명확해졌습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

시현🥐🐟 빵빠라빵빵빵빵빵 쾁쾁쾁

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Refactor] 1차 QA2 반영

3 participants