Skip to content

feat(auth): auth API and recipient designation updates#107

Merged
1hyok merged 10 commits into
mainfrom
feat/auth-api
Feb 18, 2026
Merged

feat(auth): auth API and recipient designation updates#107
1hyok merged 10 commits into
mainfrom
feat/auth-api

Conversation

@1hyok
Copy link
Copy Markdown
Collaborator

@1hyok 1hyok commented Feb 18, 2026

목적 / 배경

  • 인증 관련 API 연동 및 수신자 지정 UI 통합
  • 갤러리/파일: 정보 처리 방법 섹션을 Figma 수신자 지정 컴포넌트로 교체
  • 소셜네트워크·추모 가이드라인에 수신자 지정 섹션 추가
  • Record·Receiver 등 코드 품질 이슈 정리 (S107, S3776, unused imports, deprecated Divider 등)

변경 사항 요약

  • 수신자 지정: RecipientDesignationSection 추가, 갤러리에서 정보 처리 방법 제거 후 수신자 지정 단일 섹션으로 통일, 소셜/추모 가이드라인에 수신자 지정 섹션 추가
  • Params 그룹화: RecordDiaryScreen, RecordDeepMindScreen, RecordDiaryContentItem 등 S107 대응용 params 데이터 클래스 도입
  • 인지 복잡도: RecordCalendarSort·RecordDiaryContentItem 등에서 헬퍼/추출 컴포넌트로 분리
  • 기타: NavGraph merge conflict 해결, unused 변수/import 제거, Divider→HorizontalDivider, collectAsStateWithLifecycle 사용, SavedStateHandle indexed accessor 등

주요 수정 파일

  • RecipientDesignationSection.kt, GalleryAndFileEditContent*.kt, SocialNetworkEditContent*.kt, MemorialGuidelineContent.kt, MemorialGuidelineEditContent*.kt
  • RecordDiaryScreenParams.kt, RecordDeepMindScreenParams.kt, RecordDiaryContentItemParams.kt
  • RecordCalendarSort.kt, RecordDiaryContentItem.kt, RecordQuestionScreen.kt, RecordNavgraph.kt
  • NavGraph.kt, ReceiverMemorialPlaylistViewModel.kt, ReceiverTimeLetterListScreen.kt, RecordDailyQuestionListScreen.kt

테스트/검증

  • ./gradlew :app:compileDebugKotlin 통과
  • ./gradlew ktlintCheck 통과

Made with Cursor

1hyok added 10 commits February 18, 2026 16:32
- Firebase App Distribution 워크플로우에 디버그 키스토어의 SHA-1 해시를 출력하는 단계를 추가했습니다. 이를 통해 카카오 개발자 센터에 키 해시를 등록하여, 배포된 빌드에서 카카오 로그인이 실패하는 문제를 해결할 수 있습니다.
- `local.properties`에 `KAKAO_NATIVE_APP_KEY` 주입 시 성공 여부를 명확히 알 수 있도록 로그 메시지를 추가했습니다.
- 커밋 메시지나 PR에 "Made with Cursor"와 같은 AI 도구 관련 문구를 포함하지 않도록 하는 새로운 규칙(`no-cursor-attribution-in-pr.mdc`)을 추가했습니다.
- `README.md`: CI/CD를 통해 배포된 APK에서 카카오 로그인이 실패할 경우, 빌드 로그에 출력되는 SHA-1 키 해시를 Kakao Developers에 등록해야 한다는 안내를 추가했습니다.
- `.github/workflows/firebase_app_distribution.yml`: CI 워크플로에서 `keytool` 대신 `./gradlew signingReport` 명령어를 사용하여 빌드 서명에 사용된 SHA-1 키 해시를 더 안정적으로 출력하도록 개선했습니다.
- `TokenManager.isLoggedInFlow`를 구독하여 로그인/로그아웃 상태 변경을 감지하고, `null` (로딩 중), `true` (로그인), `false` (로그아웃) 상태에 따라 적절한 화면으로 자동 전환하는 로직을 구현했습니다.
- **로그아웃 시 즉시 스플래시 화면으로 이동:** 어느 화면에 있든 로그아웃 상태가 감지되면 스플래시 화면으로 즉시 이동하여 사용자 경험을 개선했습니다.
- **'root' 라우트 로직 개선:** 앱 시작 시 'root' 라우트에서 `isLoggedIn` 상태에 따라 'home' 또는 'splash'로 분기하도록 수정했습니다.
- **홈 화면 보호:** 로그인 상태가 아닌 경우, 홈 화면이 잠시 표시되는 것을 방지하기 위해 빈 `Box`를 표시하고 스플래시 화면으로 리디렉션하도록 수정했습니다.
- 코드 가독성과 재사용성을 높이기 위해 내비게이션 관련 헬퍼 함수(`ejectToSplashIfLoggedOut`, `dispatchFromRoot` 등)들을 추가했습니다.
- `getReceiverDetail` API 호출 시, 서버에서 인증 정보를 통해 사용자를 식별하므로 불필요한 `userId` 쿼리 파라미터를 제거했습니다.
- `UserApiService`, `UserRepository`, `GetReceiverDetailUseCase`, `ReceiverDetailViewModel` 등 관련 계층의 함수 시그니처에서 `userId`를 모두 삭제하여 코드를 간소화했습니다.
- `ReceiverDetailViewModelTest`에서 `GetUserIdUseCase` 모의(mock) 객체 및 관련 테스트 로직을 제거했습니다.
- `ReceiverDetailViewModel`의 `loadReceiverDetail` 함수에서 `userId`를 가져오는 로직을 제거했습니다.
- `ReceiverDetailRouteContent`에서 `hiltViewModel(backStackEntry)`를 사용하여 ViewModel의 범위를 내비게이션 그래프의 백 스택 엔트리로 지정하여, 화면이 다시 표시될 때 ViewModel이 재생성되지 않도록 수정했습니다.
- `ReceiverRegisterScreen.kt` 파일을 삭제하고, 재사용 가능한 `ReceiverFormScreen.kt`를 새로 생성했습니다.
- `ReceiverFormScreen`은 `screenTitle`과 `actionText` 파라미터를 받아 "수신자 등록"과 "수신자 수정" 화면을 모두 처리할 수 있도록 구현되었습니다.
- `SettingNavGraph`에 수신자 수정을 위한 `ReceiverEditRoute`를 추가하고, 수신자 상세 화면의 '수정' 버튼 클릭 시 이 경로로 이동하도록 연결했습니다.
- 수신자 정보를 수정하는 `EditReceiverViewModel`을 추가했습니다. 이 ViewModel은 `receiverId`를 받아 기존 수신자 정보를 불러오고(GET), `updateReceiver` 함수를 통해 이름, 관계, 연락처 등을 수정(PATCH)하는 기능을 수행합니다.
- 수신자 수정을 위한 `UpdateReceiverUseCase`를 추가했습니다.
- `UserRepository` 인터페이스 및 `UserRepositoryImpl` 구현체에 `updateReceiver` 함수를 추가하고, `UserApiService`에 `PATCH /users/receivers/{receiverId}` API 요청을 정의했습니다.
- 수신자 수정 화면(`ReceiverFormScreen`)이 `EditReceiverViewModel`과 연동되도록 수정했습니다. 수정 화면 진입 시 기존 정보를 불러와 폼에 채우고, '수정' 버튼 클릭 시 ViewModel의 `updateReceiver` 함수를 호출합니다. 수정이 성공하면 이전 화면으로 자동 복귀합니다.
- 수신자 등록 및 수정 화면의 재사용성을 높이기 위해, `ReceiverFormScreen`의 콜백과 초기 상태를 관리하는 `ReceiverFormCallbacks`와 `ReceiverFormInitialState` 데이터 클래스를 추가했습니다.
- `SettingMainScreen`, `SettingMainRouteContent`, `settingNavGraph`에 `onBottomNavTabSelected` 콜백을 추가하여, 설정 화면의 바텀 네비게이션 탭을 눌렀을 때 화면이 정상적으로 전환되도록 수정했습니다.
- `NavGraph.kt`에서 `settingNavGraph`를 호출할 때 해당 콜백을 전달하도록 변경했습니다.
- `GalleryDetailScreen.kt` 내부에 정의되어 있던 `GalleryDetailDeleteDialog`를 별도의 공용 컴포넌트인 `DeleteConfirmDialog`로 분리했습니다.
- 이를 통해 `GalleryDetailScreen`의 코드를 간소화하고, 삭제 확인 다이얼로그의 재사용성을 높였습니다.
'수신자 지정' 라벨과 수신자 목록을 포함하는 `RecipientDesignationSection` 컴포저블을 새로 추가하고, 이를 애프터노트 수정 화면의 여러 콘텐츠에 적용하여 UI 구조를 개선했습니다.

- **`RecipientDesignationSection` 컴포저블 신규 추가**
  - "수신자 지정" 라벨과 `AfternoteEditReceiverList`를 묶어 재사용 가능한 컴포저블로 분리했습니다.

- **기존 콘텐츠 리팩토링**
  - **`GalleryAndFileEditContent`**: 기존의 '정보 처리 방법'과 '수신자 추가' 로직을 제거하고, `RecipientDesignationSection`을 사용하도록 변경했습니다.
  - **`SocialNetworkEditContent`**: `recipientSection` 파라미터를 추가하여 수신자 지정 UI를 표시할 수 있도록 수정했습니다.
  - **`MemorialGuidelineEditContent`**: `MemorialGuidelineContent`의 슬롯에 `recipientContent`를 추가하고, `RecipientDesignationSection`을 통해 수신자 지정 UI를 표시하도록 업데이트했습니다.
  - 관련 `Params` 데이터 클래스들(`GalleryAndFileEditContentParams`, `SocialNetworkEditContentParams`, `MemorialGuidelineEditContentParams`)을 수정하여 `recipientSection`을 받도록 통일했습니다.
- **화면별 파라미터 클래스 도입**: `RecordDiaryScreen`, `RecordDeepMindScreen`, `RecordDiaryContentItem` 등 여러 컴포저블의 파라미터를 `@Immutable` 데이터 클래스로 그룹화하여 코드 가독성과 안정성을 개선했습니다.
- **기록 목록 조회 로직 개선**:
    - `getMindRecords` API 호출 시 `type` 파라미터를 추가하여 '일기', '깊은 생각', '데일리 질문' 등 특정 종류의 기록만 필터링하여 조회하도록 수정했습니다.
    - '일기' 목록 화면에서는 '일기'와 '깊은 생각'을 모두 조회하여 최신순으로 정렬하여 함께 표시합니다.
    - 캘린더에 기록이 있는 날짜를 표시하기 위해 `markedDates`를 API 응답으로 받아 사용하도록 개선했습니다.
- **데일리 질문 기능**:
    - `GET /daily-question` API를 호출하여 오늘의 질문을 가져오는 `GetDailyQuestionUseCase`를 추가했습니다.
    - 질문 답변 화면(`RecordQuestionScreen`) 진입 시 오늘의 질문을 불러와 표시하고, 답변 저장 시 질문 ID를 함께 전송하도록 수정했습니다.
- **깊은 생각 기록 카테고리 추가**: '깊은 생각' 기록 시 "나의 가치관", "오늘 떠올린 생각", "인생을 되돌아 보며" 중에서 카테고리를 선택할 수 있는 드롭다운 메뉴를 추가했습니다.
- **UI 및 ViewModel 개선**:
    - 기록 생성 및 수정 로직을 `MindRecordViewModel`로 통합하고, 성공/실패 처리를 개선했습니다.
    - 기록 목록 아이템(`RecordListItem`)에서 제목이나 내용이 비어있을 경우 '-'로 표시되도록 수정했습니다.
    - 기록 화면 네비게이션 라우트를 `ListRoute("TYPE")` 형식으로 변경하여 다용도로 활용할 수 있게 했습니다.
@1hyok 1hyok merged commit 76ce48f into main Feb 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant