Skip to content

초대장 공유하기 텍스트 수정#163

Closed
chanho0908 wants to merge 5 commits into
feature/#157-loading-error-uifrom
feature/#162-onboarding-anniversary-policy
Closed

초대장 공유하기 텍스트 수정#163
chanho0908 wants to merge 5 commits into
feature/#157-loading-error-uifrom
feature/#162-onboarding-anniversary-policy

Conversation

@chanho0908
Copy link
Copy Markdown
Contributor

이슈 번호

#162

작업내용

  • 초대장 메시지에 플레이 스토어 링크 첨부 제거
  • 초대장 도메인 수정

결과물

Before After
KakaoTalk_Photo_2026-05-21-14-42-27 ㄹㅁㅅㄷㄱ

리뷰어에게 추가로 요구하는 사항 (선택)

@chanho0908 chanho0908 self-assigned this May 21, 2026
@chanho0908 chanho0908 added the Refactor Good for newcomers label May 21, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 21, 2026

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2ae07b6d-1efd-4a12-b487-5cc9c179bd3e

📥 Commits

Reviewing files that changed from the base of the PR and between b29d219 and 4e54bea.

📒 Files selected for processing (58)
  • .gitignore
  • app/src/main/AndroidManifest.xml
  • core/design-system/src/main/res/values/strings.xml
  • core/result/src/main/java/com/twix/result/Extension.kt
  • core/share/src/main/java/com/twix/share/InviteLaunchDispatcher.kt
  • core/ui/src/main/java/com/twix/ui/base/BaseViewModel.kt
  • core/ui/src/main/java/com/twix/ui/base/ContentLoadableState.kt
  • core/ui/src/main/java/com/twix/ui/base/DefaultLoadableState.kt
  • core/ui/src/main/java/com/twix/ui/base/LoadableState.kt
  • feature/goal-editor/src/main/java/com/twix/goal_editor/GoalEditorScreen.kt
  • feature/goal-editor/src/main/java/com/twix/goal_editor/GoalEditorViewModel.kt
  • feature/goal-editor/src/main/java/com/twix/goal_editor/model/GoalEditorUiState.kt
  • feature/goal-manage/src/main/java/com/twix/goal_manage/GoalManageIntent.kt
  • feature/goal-manage/src/main/java/com/twix/goal_manage/GoalManageScreen.kt
  • feature/goal-manage/src/main/java/com/twix/goal_manage/GoalManageViewModel.kt
  • feature/goal-manage/src/main/java/com/twix/goal_manage/model/GoalManageUiState.kt
  • feature/login/src/main/java/com/twix/login/LoginScreen.kt
  • feature/login/src/main/java/com/twix/login/LoginViewModel.kt
  • feature/login/src/main/java/com/twix/login/contract/LoginUiState.kt
  • feature/main/src/main/java/com/twix/home/HomeScreen.kt
  • feature/main/src/main/java/com/twix/home/HomeViewModel.kt
  • feature/main/src/main/java/com/twix/home/model/HomeUiState.kt
  • feature/main/src/main/java/com/twix/stats/StatsScreen.kt
  • feature/main/src/main/java/com/twix/stats/StatsViewModel.kt
  • feature/main/src/main/java/com/twix/stats/contract/StatsIntent.kt
  • feature/main/src/main/java/com/twix/stats/contract/StatsUiState.kt
  • feature/main/src/main/java/com/twix/stats/preview/StatsUiStatePreviewProvider.kt
  • feature/notification/src/main/java/com/twix/notification/NotificationScreen.kt
  • feature/notification/src/main/java/com/twix/notification/NotificationViewModel.kt
  • feature/notification/src/main/java/com/twix/notification/contract/NotificationIntent.kt
  • feature/notification/src/main/java/com/twix/notification/contract/NotificationUiState.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/OnBoardingViewModel.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/contract/OnBoardingIntent.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/contract/OnBoardingLoadingAction.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/contract/OnBoardingUiState.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/couple/CoupleConnectScreen.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/dday/DdayRoute.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/invite/InviteCodeScreen.kt
  • feature/onboarding/src/main/java/com/twix/onboarding/profile/ProfileScreen.kt
  • feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetailScreen.kt
  • feature/photolog/detail/src/main/java/com/twix/photolog/detail/PhotologDetailViewModel.kt
  • feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailIntent.kt
  • feature/photolog/detail/src/main/java/com/twix/photolog/detail/contract/PhotologDetailUiState.kt
  • feature/photolog/detail/src/main/java/com/twix/photolog/detail/preview/PhotologDetailPreviewProvider.kt
  • feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorRoute.kt
  • feature/photolog/editor/src/main/java/com/twix/photolog/editor/PhotologEditorViewModel.kt
  • feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorIntent.kt
  • feature/photolog/editor/src/main/java/com/twix/photolog/editor/contract/PhotologEditorUiState.kt
  • feature/settings/src/main/java/com/twix/settings/SettingsIntent.kt
  • feature/settings/src/main/java/com/twix/settings/SettingsScreen.kt
  • feature/settings/src/main/java/com/twix/settings/SettingsViewModel.kt
  • feature/settings/src/main/java/com/twix/settings/account/SettingsAccountScreen.kt
  • feature/settings/src/main/java/com/twix/settings/model/SettingsUiState.kt
  • feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailScreen.kt
  • feature/stats/detail/src/main/java/com/twix/stats/detail/StatsDetailViewModel.kt
  • feature/stats/detail/src/main/java/com/twix/stats/detail/contract/StatsDetailIntent.kt
  • feature/stats/detail/src/main/java/com/twix/stats/detail/contract/StatsDetailUiState.kt
  • feature/stats/detail/src/main/java/com/twix/stats/detail/preview/StatsDetailUiStatePreviewProvider.kt

📝 Walkthrough

Walkthrough

이 PR은 로딩/에러 상태 관리 아키텍처를 대폭 리팩토링하고, 전체 기능 화면의 렌더링 패턴을 일관되게 개선합니다. 기존의 단일 LoadableState 인터페이스를 DefaultLoadableState(최소 계약)와 ContentLoadableState(콘텐츠 로드 추적)로 계층화하여 상태 관리를 단순화합니다. BaseViewModel의 상태 감소 로직도 새로운 인터페이스에 맞게 개선되고, 로딩 상태를 미업데이트하면서 결과를 처리하는 헬퍼가 추가됩니다. 로그인, 목표, 홈, 통계, 알림, 온보딩, 포토로그, 설정 등 거의 모든 기능의 UI 상태가 새 인터페이스로 마이그레이션되며, 각 화면은 초기 로딩, 에러, 오버레이 로딩 상태를 일관되게 렌더링하고 재시도 기능을 지원합니다. 온보딩 기능의 경우 커플 연결, 프로필, 디데이, 마케팅 동의 등 세분화된 로딩 액션을 추적하여 더 정확한 UI 피드백을 제공합니다. 추가로 깊은 링크 도메인이 새 값으로 통일됩니다.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes


주요 리뷰 포인트

좋은 점

  1. 명확한 아키텍처 전환: DefaultLoadableStateContentLoadableState의 계층 분리가 상태 관리를 단순하고 재사용 가능하게 만들었습니다. 최소 계약(isLoading, error)과 확장된 계약(hasLoadedContent)을 분리한 설계가 적절합니다.

  2. 일관된 화면 렌더링 패턴: 거의 모든 기능 화면이 동일한 분기 패턴(showLoading → TwixLoadingOverlay, showError → ErrorScreen, else → 정상 화면)을 따르도록 개선되어 코드 가독성과 유지보수성이 높아졌습니다.

  3. 세분화된 로딩 상태 추적: OnBoarding의 OnBoardingLoadingAction 추가로 커플 연결, 프로필 제출 등 각 단계의 로딩 상태를 독립적으로 추적할 수 있게 되어 사용자 경험이 개선될 것으로 보입니다.

  4. 초기 로딩 vs 재조회 로딩 구분: hasLoadedContent 플래그로 초기 로딩(전체 화면 로딩 표시)과 재조회 로딩(오버레이만 표시)을 명확히 구분합니다.

⚠️ 검토가 필요한 부분

  1. 상태 기본값 변경의 영향 범위
    많은 UI 상태에서 isLoading의 기본값이 falsetrue로 변경되었습니다. (예: GoalManageUiState, OnBoardingUiState)

    • 질문: 이렇게 기본값을 true로 설정한 이유는 무엇인가요? 화면 진입 시 항상 로딩 상태로 표시하려는 의도인지, 아니면 초기화 로직과 함께 명시적으로 false로 설정하는 방식이 의도인지 명확히 하면 좋겠습니다.
  2. copyLoadableStatecopyState 마이그레이션의 완전성
    일부 파일에서는 아직 참조가 남아있을 수 있습니다. 컴파일 타임에 모든 오버라이드가 감지되겠지만, 모든 UI 상태가 일관되게 마이그레이션되었는지 재확인해주세요.

    • 제안: 마이그레이션 후 컴파일 테스트 결과를 첨부하면 리뷰 신뢰도가 높아질 것 같습니다.
  3. BaseViewModel의 handleResultWithoutLoadableStateUpdate의 사용 범위
    현재 알림 읽음 처리, 반응 처리 등 "best effort" 작업에만 사용되고 있습니다.

    • 질문: 향후 다른 기능에서 이 헬퍼를 사용할 때 가이드라인이 필요할까요? 언제 로딩 상태를 업데이트하지 말아야 하는지 문서화하는 것도 좋겠습니다.
  4. 에러 처리의 조건부 로직
    HomeViewModel, StatsViewModel, GoalManageViewModel에서 shouldShowErrorScreen 또는 !hasLoadedContent 기반의 복잡한 에러 토스트 제어가 있습니다.

    • 검토 대상: GoalManageViewModel의 fetchGoalSummaryList(date, showInitialLoading, showToastOnError) 처럼 3개 파라미터 메서드가 추가되었는데, 호출 지점이 많을수록 실수 가능성이 높습니다. 인라인 람다나 명명된 파라미터 사용으로 가독성을 더 높일 수 있을까요?
  5. 온보딩 액션 가드의 일관성
    connectCouple, profileSetup, anniversarySetup, initNotificationSettings 모두 currentState.loadingAction 존재 여부를 확인하고 있습니다.

    • 제안: 공통 가드 헬퍼(ensureNoLoadingActionInProgress() 같은)로 추상화하면 중복 코드를 줄일 수 있을 것 같습니다.
  6. 깊은 링크 도메인 변경의 배포 타이밍
    AndroidManifest.xml과 InviteLaunchDispatcher 모두에서 도메인이 변경되었습니다.

    • 질문: 웹서버의 도메인 지원이 먼저 준비되어 있나요? 도메인 변경 후 기존 사용자의 초대 링크가 깨질 수 있으므로, 배포 순서와 폴백 처리를 확인해주세요.

📝 개선 제안

  1. UI 상태 초기값 명시화
    isLoading = true 기본값이 있으면, 각 뷰모델의 init 블록에서 명시적으로 isLoading = false로 설정하는 주석을 추가하면 의도가 더 명확해집니다.

  2. 에러 처리 표준화
    hasLoadedContent가 false일 때와 true일 때의 에러 표시 차이를 일관된 규칙으로 문서화하면, 향후 새로운 기능 추가 시 에러 처리 로직을 쉽게 따를 수 있을 것 같습니다.

  3. 온보딩 로딩 액션 확장성
    OnBoardingLoadingAction enum이 현재 4개 항목인데, 향후 새로운 온보딩 단계가 추가될 때 이 enum과 동반 변경 필요성이 생길 것 같습니다. Sealed class나 더 유연한 설계를 검토해볼 가치가 있을 것 같습니다.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/#162-onboarding-anniversary-policy

@chanho0908 chanho0908 changed the base branch from develop to feature/#157-loading-error-ui May 21, 2026 05:45
@chanho0908 chanho0908 changed the title Feature/#162 onboarding anniversary policy 초대장 공유하기 텍스트 수정 May 21, 2026
@chanho0908 chanho0908 closed this May 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Refactor Good for newcomers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant