Repository navigation
수신 로드·식별자·상세·에디터 상태 모델 정합화 #601
Copy link
Copy link
Labels
area:afternote애프터노트 기능 영역애프터노트 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
Description
이 이슈는 범위가 전량 구현돼 닫혔다. 본문이 나눈 13개 PR(#819~#831)이 모두
develop에 머지됐다 — 갈라 낼 미구현 범위가 없다. 본문의 PR 분할 기록은 그대로 남긴다.마지막 #831 이 2026-08-26T23:40:30Z 에 머지됐지만, 스택 PR 은 base 가 기본 브랜치가 아니면 GitHub 이 close 키워드를 링크로 만들지 않아 이 이슈가 열린 채 남아 있었다. 같은 오인을 막는 라벨은 #1532 로 세웠다.
📜 Overview (Required)
수신 추억 플레이리스트의 잘못된 ID 폴백을 고치는 과정에서 확인한 애프터노트의 식별자·상세 계약·에디터 상태 문제를, 모두 독립 빌드 가능한 13개 PR로 나눠 정리한다.
실제 변경 범위와 담당 PR
- [refactor] #601 수신 플레이리스트 상태와 오류 처리 정리 #819 — 수신 플레이리스트 상태와 오류 처리
- 잘못된 ID의 첫 항목 폴백 제거
- Loading/Success/Error 및 재시도 연결
- [refactor] #601 목록과 내비게이션 ID를 Long으로 통일 #820 — 목록·상세·내비게이션 ID를
Long으로 통일- 문자열 ID 왕복 제거
- 타입 세이프 route와
SavedStateHandle.toRoute()적용 - 수신자 상세·플레이리스트 라우트 인자 String→Long — 항법 인자 검증을 타입으로 이관 #757 구현 범위 포함
- [refactor] #601 상세 데이터 계약을 타입별 모델로 분리 #821 — 타입별 상세 데이터 계약
DetailContent타입별 모델, non-null type, DTO·mapper 정합화serviceName, credentials, 공통leaveMessageBlocks정리
- [refactor] #601 수신 상세와 플레이리스트 표시 모델 정리 #822 — 수신 상세·플레이리스트 표시 모델
- 수신 화면을 새 상세 계약에 연결
- 불필요한
AlbumCover.id제거 및 선택 키 명확화
- [refactor] #601 곡 식별자를 UI 선택 키로 분리 #823 — 곡 식별자
- 서버 ID와 UI 선택 키 분리
- nullable 곡 ID 제거
- [refactor] #601 에디터 선택과 처리 방법 컴포넌트 정리 #824 — 에디터 선택·처리 방법 컴포넌트
EditorSelectionDropdownrename과 타입 기반 선택- 처리 방법
localId와 필수 콜백 정리
- [build] #601 staged snapshot만 검사하도록 pre-commit 정리 #825 — pre-commit staged snapshot 검사
- partial-file 커밋에서 unstaged 변경이 섞이지 않도록 훅 수정
- [refactor] #601 홈 종류 명칭과 서비스 메타데이터 정리 #826 — 홈 종류 명칭·서비스 메타데이터
- 목록·필터의 category 명칭을 type으로 통일
- UI 서비스 enum의 서버 종류 키 제거
- [refactor] #601 작성자 상세 내비게이션 통합 #827 — 작성자 상세 내비게이션 통합
- 종류별 Stateful 상세 Route 중복 제거
- 공통 DetailRoute와 실제 type 기반 수정 진입
- [refactor] #601 상세 프리필을 종류별 모델로 분리 #828 — 상세 prefill 종류별 모델
- 공통 필드와 종류별 입력을
EditorFormPrefill·EditorContentPrefill로 분리 - 종류별 상세 응답 매퍼 테스트 추가
- [refactor] #601 에디터 종류를 AfternoteType으로 통일 #829 — 에디터 종류를
AfternoteType으로 통일
EditorCategory제거 및 폼·저장·내비게이션 종류 축 통합
- [refactor] #601 에디터 flow 상태와 내비게이션 통합 #830 — 에디터 flow 상태·내비게이션 통합
- flow-scoped ViewModel과 플레이리스트 폼 SSOT 정리
- [refactor] #601 저장 검증과 에디터 오류 상태 통합 #831 — 저장 검증·에디터 오류 상태 통합
- 타입 기반 저장 검증
- validation·network·server·upload 오류 단일 상태와 소비 경로 정리
PR 구성
- 병합 순서: [refactor] #601 수신 플레이리스트 상태와 오류 처리 정리 #819 → [refactor] #601 목록과 내비게이션 ID를 Long으로 통일 #820 → [refactor] #601 상세 데이터 계약을 타입별 모델로 분리 #821 → [refactor] #601 수신 상세와 플레이리스트 표시 모델 정리 #822 → [refactor] #601 곡 식별자를 UI 선택 키로 분리 #823 → [refactor] #601 에디터 선택과 처리 방법 컴포넌트 정리 #824 → [build] #601 staged snapshot만 검사하도록 pre-commit 정리 #825 → [refactor] #601 홈 종류 명칭과 서비스 메타데이터 정리 #826 → [refactor] #601 작성자 상세 내비게이션 통합 #827 → [refactor] #601 상세 프리필을 종류별 모델로 분리 #828 → [refactor] #601 에디터 종류를 AfternoteType으로 통일 #829 → [refactor] #601 에디터 flow 상태와 내비게이션 통합 #830 → [refactor] #601 저장 검증과 에디터 오류 상태 통합 #831
- #819의 base는
develop이고, [refactor] #601 목록과 내비게이션 ID를 Long으로 통일 #820~#831은 각각 바로 앞 PR의 head를 base로 사용한다. - 각 head는 선행 단계를 누적한 빌드 가능 스냅샷이지만 PR diff에는 해당 단계의 변경만 표시된다.
- [refactor] #601 목록과 내비게이션 ID를 Long으로 통일 #820~#831은 선행 PR 병합 후 base를
develop으로 변경한 뒤 병합한다. feature base 상태에서는 오병합 방지 guard가 의도적으로 실패한다. - 최종 #831이 이 이슈를 닫는다.
다른 이슈와의 경계
- EditorCategory 를 AfternoteType 으로 수렴 — 종류 축 마지막 갈래 #695 구현은 #829에 포함된다.
- 수신자 상세·플레이리스트 라우트 인자 String→Long — 항법 인자 검증을 타입으로 이관 #757 구현은 #820에 포함되지만, 선행 이슈 #615가 열려 있어 수신자 상세·플레이리스트 라우트 인자 String→Long — 항법 인자 검증을 타입으로 이관 #757 자동 종료는 보류한다.
- fix(afternote): 추억 플레이리스트 앨범 커버 미표시 — URL 부재·로드 실패 구분 불가 #580, 필수 발송 날짜 누락 시 등록이 무반응 — 호출·안내 없음 #624, fix(afternote): 추억 노트 남기실 말씀 작성 경로 미완성 — UI·생성 payload/DTO 누락 #678, 서버 실패가 무음·빈 정상 화면으로 수렴 — 목록·상세·에디터 복구 수단 부재 #705, feat(afternote): 임시저장 저장·발행 전환과 이어쓰기 프리필 코어 #808, #539와 겹치는 변경은 각 PR에 관련 이슈로만 표기하며 해당 이슈의 남은 범위까지 닫지 않는다.
📌 Child Issue(Optional)
- [refactor] #601 수신 플레이리스트 상태와 오류 처리 정리 #819
- [refactor] #601 목록과 내비게이션 ID를 Long으로 통일 #820
- [refactor] #601 상세 데이터 계약을 타입별 모델로 분리 #821
- [refactor] #601 수신 상세와 플레이리스트 표시 모델 정리 #822
- [refactor] #601 곡 식별자를 UI 선택 키로 분리 #823
- [refactor] #601 에디터 선택과 처리 방법 컴포넌트 정리 #824
- [build] #601 staged snapshot만 검사하도록 pre-commit 정리 #825
- [refactor] #601 홈 종류 명칭과 서비스 메타데이터 정리 #826
- [refactor] #601 작성자 상세 내비게이션 통합 #827
- [refactor] #601 상세 프리필을 종류별 모델로 분리 #828
- [refactor] #601 에디터 종류를 AfternoteType으로 통일 #829
- [refactor] #601 에디터 flow 상태와 내비게이션 통합 #830
- [refactor] #601 저장 검증과 에디터 오류 상태 통합 #831
📍 Note (Optional)
- 원래 워크트리의 미커밋 변경은 포함하지 않았다.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:afternote애프터노트 기능 영역애프터노트 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
Activity
[-]fix(afternote): 수신 추억 플레이리스트 로드 실패가 화면에 미도달 — id 누락 시 첫 애프터노트로 조용히 폴백[/-][+]refactor(afternote): 수신 로드·식별자·상세·에디터 상태 모델 정합화[/+]Merge pull request #819 from Afternote/feat/601-01-receiver-load
Merge pull request #820 from Afternote/feat/601-02-id-navigation
Merge pull request #826 from Afternote/feat/601
Merge pull request #821 from Afternote/feat/601-03-type-unification
Merge pull request #822 from Afternote/feat/601-04-detail-contract
Merge pull request #823 from Afternote/feat/601-05-editor-models
Merge pull request #824 from Afternote/feat/601-06-editor-flow-errors
[-]refactor(afternote): 수신 로드·식별자·상세·에디터 상태 모델 정합화[/-][+]수신 로드·식별자·상세·에디터 상태 모델 정합화[/+]OnlyReadOneBook commentedon Aug 29, 2026
본문이 나눈 13개 PR 이 전부 머지된 것을 확인하고 닫는다.
본문 「다른 이슈와의 경계」가 «이 이슈가 닫지 않는다» 고 명시한 겹침 범위는 각자 자기 이슈에서 그대로 추적된다 — #624 · #705 · #808 이 열려 있고, #580 · #678 · #539 · #695 · #757 · #615 는 이미 닫혔다. 이 이슈가 넘기는 잔여는 없다.