Skip to content

feat(afternote): 수신자 지정·검증·상세 화면 개선 및 공통 라우트 정리#111

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

feat(afternote): 수신자 지정·검증·상세 화면 개선 및 공통 라우트 정리#111
1hyok merged 5 commits into
mainfrom
feat/auth-api

Conversation

@1hyok
Copy link
Copy Markdown
Collaborator

@1hyok 1hyok commented Feb 18, 2026

목적 / 배경

  • 수신자 지정 '+' 탭 시 타임레터와 동일한 수신자 목록 화면으로 이동해 선택하도록 변경
  • 수신자 미선택 시 전체 목록 대신 '최소 1명 선택' 검증 메시지 노출
  • 처리 방법(갤러리/소셜) 비어 있을 때 등록 차단 시 안내 메시지가 보이지 않던 문제 해결
  • 상세 화면에서 최종 작성일이 비어 있을 때 fallback 표시
  • 수신자 목록 라우트를 core로 이동해 공통 사용 (ReceiverRoute.ReceiverListRoute)

변경 사항 요약

  • 수신자 선택: 수신자 지정 '+' → ReceiverRoute.ReceiverListRoute(수신자 목록) 이동, 선택 결과를 SavedStateHandle로 전달 후 편집 상태에 반영
  • 검증: 수신자 0명이면 RECEIVERS_REQUIRED로 저장 차단, resolveReceiverIds 제거(전체 목록 fallback 제거)
  • 검증 메시지: saveError 메시지가 비어 있을 때 '입력 내용을 확인해 주세요.' fallback 적용
  • 최종 작성일: detail.updatedAt/createdAt이 비어 있으면 '정보 없음' 표시
  • 라우트: TimeLetterRoute.ReceiveListRoute 제거, core에 ReceiverRoute.ReceiverListRoute 및 SELECTED_RECEIVER_ID_KEY 정의
  • Nav/복잡도: AfternoteEditRouteContent 파라미터 그룹화, 헬퍼 추출로 S107/S3776/S6518 대응

주요 수정 파일

  • core/navigation/ReceiverRoute.kt (신규)
  • AfternoteNavgraph.kt, AfternoteEditViewModel.kt, AfternoteEditScreen.kt
  • TimeLetterRoute.kt, TimeLetterNavGraph.kt, NavGraph.kt
  • AfternoteSaveState.kt, strings.xml

테스트/검증

  • 수신자 지정 '+' → 수신자 목록 → 선택 후 복귀 시 선택한 수신자 반영 확인
  • 수신자 0명으로 등록 시 '수신자를 한 명 이상 선택해 주세요.' 노출 확인
  • 처리 방법 비어 있는 상태에서 등록 시 안내 메시지 노출 확인
  • 상세 화면에서 최종 작성일 없을 때 '정보 없음' 표시 확인

Made with Cursor

'소셜' 및 '추모 플레이리스트' 유형의 애프터노트를 생성할 때 수신자 목록을 함께 전달하도록 API 요청 및 관련 로직을 수정했습니다. 이로써 모든 카테고리에서 수신자를 지정할 수 있게 되었습니다.

- **API 요청 DTO 수정**: `AfternoteCreateSocialRequestDto`와 `AfternoteCreatePlaylistRequestDto`에 수신자 ID 목록을 담는 `receivers` 필드를 추가했습니다.
- **ViewModel 및 UseCase 수정**: 애프터노트 등록 로직(`AfternoteEditViewModel`, `CreateSocialAfternoteUseCase`, `CreatePlaylistAfternoteUseCase`)에서 수신자 ID 목록(`receiverIds`)을 Repository까지 전달하도록 파라미터를 추가하고 관련 로직을 수정했습니다.
- **유효성 검사 강화**:
    - 모든 카테고리에서 애프터노트 저장 시 최소 1명 이상의 수신자가 등록되었는지 확인하는 유효성 검사를 추가했습니다. (`RECEIVERS_REQUIRED`)
    - 서버로부터 수신자 미등록으로 인한 오류(HTTP 400, code 475) 응답을 받을 경우, 이를 파싱하여 동일한 유효성 검사 오류로 처리하도록 구현했습니다.
- **상세 화면 UI 개선**: 애프터노트 상세 화면에서 수정일(`updatedAt`)이 없을 경우 생성일(`createdAt`)을 최종 작성일로 표시하도록 수정하여, 새로 생성된 항목의 날짜 정보가 비어 보이는 문제를 해결했습니다.
- **문자열 리소스 추가**: 수신자 최소 1명 필요에 대한 공통 유효성 검사 메시지(`afternote_validation_receivers_required`)를 추가했습니다.
- **테스트 코드 업데이트**: 변경된 Repository 및 UseCase의 인터페이스에 맞게 테스트 코드를 수정했습니다.
- **수신자 지정 방식 통일:** 기존에 '갤러리 및 파일' 카테고리에서 지원하던 '추가 수신자에게 정보 전달' 옵션을 제거했습니다. 이제 모든 애프터노트 카테고리(소셜, 갤러리, 추모 가이드라인)는 '설정 > 수신자 목록'에 등록된 수신자만 지정할 수 있습니다.
- **UI 컴포넌트 리팩토링:**
    - 상세 화면의 수신자 정보 표시 로직을 공용 `ReceiversCard` 컴포저블로 추출하여 재사용성을 높였습니다.
    - 소셜 네트워크 및 추모 가이드라인 상세 화면에도 `ReceiversCard`를 적용하여 수신자 정보를 표시하도록 개선했습니다.
- **ViewModel 로직 간소화:**
    - 수신자 지정 방식이 단일화됨에 따라, `AfternoteEditViewModel`에서 '추가 수신자'와 '기본 수신자'를 분기 처리하던 복잡한 로직을 제거하고 단순화했습니다.
    - 수신자 관련 유효성 검사 로직을 간소화하고, 관련 에러 메시지를 명확하게 수정했습니다.
- **불필요한 코드 및 리소스 제거:**
    - '추가 수신자' 관련 enum(`InformationProcessingMethod.TRANSFER_TO_ADDITIONAL_AFTERNOTE_EDIT_RECEIVER`), UI 컴포넌트(`AfternoteEditReceiverDetailItem`), 더미 데이터 등을 삭제했습니다.
- 애프터노트 작성 및 수정 화면의 '수신자' 항목에 '추가' 버튼을 추가하여, 수신자 목록 화면으로 이동하고 수신자를 선택하여 추가할 수 있도록 기능을 구현했습니다.
- 기존에는 설정에 등록된 모든 수신자가 자동으로 포함되었으나, 이제 사용자가 직접 애프터노트별로 수신자를 선택해야 합니다. 이로 인해 수신자를 한 명 이상 선택하지 않으면 저장이 되지 않도록 유효성 검사 로직을 수정했습니다.
- 여러 화면(애프터노트, 타임레터)에서 공통으로 사용할 수 있는 `ReceiverRoute`를 새로 정의하여, 기존 타임레터의 수신자 선택 로직을 이 공통 라우트로 통합하고 중복 코드를 제거했습니다.
- 수신자 선택 후 이전 화면으로 돌아왔을 때, 선택한 수신자 정보(ID, 이름, 관계)를 받아와 화면에 반영하는 로직을 추가했습니다.
- `PostDeliveryConditionViewModel.kt` 파일에서 `when` 표현식 끝에 의도치 않게 추가된 'g' 문자를 삭제했습니다.
@1hyok 1hyok merged commit 9c8fed9 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