Repository navigation
refactor(afternote): author/navigation 의 «NavGraph» 6개는 실은 화면 조립부 — 기능 폴더로 이관해 수신자 규칙과 통일 #1514
Description
작업 유형
refactor — 동작 변경 없는 구조·책임·경계 개선
주 담당 모듈
afternote — 애프터노트
개요
feature:afternote:presentation 안에서 작성자와 수신자가 서로 다른 규칙을 쓴다. 같은 «상세 화면» 인데 조립부(Route)의 자리가 다르다.
| 조립부 위치 | 기능 폴더 | |
|---|---|---|
| 수신자 | receiver/detail/ReceivedAfternoteDetailRoute.kt |
receiver/detail/ 에 Route·Screen·VM·UiState·매퍼가 모여 있다 |
| 작성자 | author/navigation/AfternoteNavGraphDetail.kt |
author/detail/ 에는 Screen·VM·UiState·매퍼만 — 조립부만 다른 폴더 |
그래서 작성자 상세를 한 번 고치려면 author/detail/ 와 author/navigation/ 을 오간다. #945 가 없애려던 증상(«화면 하나 고치려고 폴더를 오간다»)인데, #945 본문은 afternote 를 이미 «기능별 묶음(B군)» 으로 분류해 두어 이 갈래가 어느 이슈에도 안 걸려 있다.
이름이 내용과 다르다 — 전수 실측
기준 리비전 1bc422bb0 (origin/develop). author/navigation/ 의 파일 9개 중 실제로 NavGraphBuilder 확장을 가진 것은 2개뿐이다.
| 파일 | top-level 선언 | NavGraphBuilder |
실체 |
|---|---|---|---|
AfternoteNavGraph.kt |
5 | O | 진짜 NavGraph (afternoteNavGraph) |
AfternoteNavGraphTheme.kt |
2 | O | afternoteComposable 공용 헬퍼 |
AfternoteNavGraphDetail.kt |
17 | X | 상세 Route + 실패·미구현·오버레이 컴포넌트 + 부수 핸들러 |
AfternoteNavGraphEditor.kt |
6 | X | 에디터 Route + 헬퍼 4종(messageResId·tryApplyReceiverSelectionFromSavedState·buildOnRegisterClick·shouldDeferEditorBaselineCapture) |
AfternoteNavGraphHome.kt |
2 | X | 홈 Route |
AfternoteNavGraphAddSong.kt |
2 | X | 곡 추가 Route |
AfternoteNavGraphSelectReceiver.kt |
2 | X | 수신자 선택 Route |
AfternoteNavGraphFingerprint.kt |
2 | X | 지문 로그인 Route |
AfternoteNavActions.kt |
0 | X | 내비 액션 홀더 |
즉 6개가 «NavGraph» 라는 이름을 달고 있지만 내용은 화면 조립부다. 수신자 쪽은 같은 역할을 …Route.kt 로 부른다.
공용 컴포넌트가 남의 패키지에 산다
DetailLoadErrorContent · DesignPendingDetailContent 는 author/navigation/AfternoteNavGraphDetail.kt 에 정의돼 있는데, 수신자 화면 3곳이 import 해서 쓴다 — receiver/detail/ReceivedAfternoteDetailRoute.kt(2종), receiver/navigation/ReceivedAfternoteNavGraph.kt(1종). 공용 자원이 한쪽 기능의 내비게이션 폴더에 얹혀 있는 형태다.
작업 범위
목표 형태는 수신자 쪽이다(#945 의 «기능별 묶음» 방향과 일치).
-
Route 6개를 기능 폴더로 옮기고
…Route.kt로 개명한다. 이동 대상 폴더는 이미 다 존재한다.현재 이동 후 AfternoteNavGraphDetail.ktauthor/detail/AfternoteDetailRoute.ktAfternoteNavGraphHome.ktauthor/home/AfternoteHomeRoute.ktAfternoteNavGraphEditor.ktauthor/editor/AfternoteEditorRoute.kt(헬퍼 4종은 editor 안 적절한 파일로)AfternoteNavGraphAddSong.ktauthor/editor/memorial/playlist/AddSongRoute.ktAfternoteNavGraphSelectReceiver.ktauthor/editor/receiver/select/SelectReceiverRoute.ktAfternoteNavGraphFingerprint.ktshared/fingerprint/FingerprintLoginRoute.kt -
공용 컴포넌트
DetailLoadErrorContent·DesignPendingDetailContent는shared/detail/로 옮긴다(이미shared/detail/에 InfoCard·ReceiversCard 등 공용 조각이 있다). -
author/navigation/에는 진짜 NavGraph 2개와model/,AfternoteNavActions.kt만 남긴다.
완료 조건
author/navigation/에NavGraphBuilder확장이 없는 파일이 남지 않는다.- 작성자·수신자 양쪽에서 «상세 화면 한 벌» 이 한 폴더에서 읽힌다.
- 수신자 화면이
author.navigation을 import 하지 않는다. - 순수 이동·개명이므로 동작 변경이 없고 기존 테스트가 그대로 통과한다.
자식 이슈
No response
참고
- 선행 조건 — 스택 #1500(fix(afternote): 상세·수신자 화면이 재진입 시 데이터를 다시 조회한다 (#701) #1374 · feat(afternote): 추억 노트 상세 제목의 이름 표시 지연 제거 (#1497) #1499 · fix(afternote): 작성자 상세 로드 실패에 재시도 진입점을 붙인다 (#1510) #1511)이 develop 에 들어간 뒤에 착수한다. 세 PR 이 전부
AfternoteNavGraphDetail.kt와AfternoteDetailViewModel.kt를 만지고 있어, 지금 파일을 옮기면 rename 충돌이 세 겹으로 난다. - presentation 패키지 구조 통일 — 타입별 묶음을 기능별로 (모듈마다 규칙이 다름) #945 는 모듈 사이의 «타입별 → 기능별» 통일이 범위이고
afternote를 B군(이미 기능별)으로 분류했다. 이 이슈는 그 분류 안에 남아 있던 예외를 정리한다. - 이동은 내용 변경을 동반하지 않는다 — [[rename 라벨이 내용 변경을 숨긴다]] 유형의 오탐을 피하려면 리뷰 시
git diff --numstat이0 0인지 확인하면 된다(헬퍼 분리와 import 정리분만 예외).
Activity