Repository navigation
Closed
Labels
area:afternote애프터노트 기능 영역애프터노트 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
Description
작업 유형
refactor — 동작 변경 없는 구조·책임·경계 개선
주 담당 모듈
afternote — 애프터노트
개요
EditableMemorialVideo 의 네 상태(Empty · ServerOnly · SelectionOnly · Replaced)를 세 상태로 줄이고, 이름을 저장 시 동작이 읽히게 바꾼다.
왜
PR #2011 은 세 상태로 줄일 수 있는지 검토하고도 "동작 변경 없음" 범위 안에서 근거가 얇다고 보류했다. 보류 사유 둘을 develop 실코드로 대조한 결과 둘 다 프로덕션에서 닿지 않는다.
Replaced(A, B).withSelection("")이ServerOnly(A)로 돌아가는 경로는 없다.withSelection에 URL 을 넣는 원천은MemorialMediaSourceState.kt의 picker 콜백 하나이고, 갤러리는uri?.let으로 null 을 거르며 카메라는 촬영 전에 만든 파일 URI 를 넘긴다. 시트의 삭제는withMemorialVideoRemoved()로 슬롯 전체를Empty로 비운다. 테스트에도 이 회귀를 단언하는 곳이 없다.- 이탈 가드 판정도 같다.
AfternoteEditorScreen.kt의 지문은 진입 시점 기준선 문자열과 통째로 비교하고, 기준선은fromPersisted로 만들어져ServerOnly아니면Empty다. 새 영상을 고른 뒤가Replaced(A,B)든SelectionOnly(B)든 기준선과 다르기는 마찬가지다.
즉 Replaced 가 드는 persisted 는 표시·저장·삭제·이탈 가드 어디서도 읽히지 않는다.
이름
ServerOnly / SelectionOnly 는 "어디에 있나" 를 말해서 읽을 때마다 두 층 구조를 먼저 떠올려야 한다. 실제로 갈리는 건 저장 때 할 일이므로 그걸 이름에 넣는다.
| 지금 | 바꿀 이름 | 뜻 |
|---|---|---|
Empty |
NoVideo |
영상 없음 |
ServerOnly |
Uploaded |
이미 서버에 올라가 있음. 저장 시 URL 만 보낸다(MediaInput.Remote) |
SelectionOnly |
PendingUpload |
새로 골라 아직 안 올림. 저장 시 업로드한다(MediaInput.Local) |
Replaced |
삭제 | of() 에서 selection 이 있으면 persisted 유무와 무관하게 PendingUpload 로 접는다 |
변경
EditableMemorialVideo를 세 상태로 줄이고 위 표대로 이름을 바꾼다.@SerialName도no_video · uploaded · pending_upload로 맞춘다.displayed · canRemove · withSelection · withSelectionThumbnail · withoutThumbnail · toMediaInput의Replaced분기를 지운다.fromPersisted(persisted)는fromServer(video)로 이름을 맞추고, KDoc 에 「결과에 미저장 선택이 없다 — 수정 진입 기준선(이탈 가드)이 이 값으로 잡힌다」 한 줄을 둔다. 시점(진입)은 호출부 사정이라 이름에 넣지 않는다.- 스냅샷 wire 가 바뀌므로
EditorFormSnapshot키를editor_form_snapshot_v5→v6으로 올린다(refactor(afternote): EditableMemorialVideo 의 네 상태를 sealed 로 봉인한다 (#1901) #2011 KDoc 규칙). EditableMemorialVideoTest의 네 상태 JSON 왕복 테스트를 세 상태로 고치고, "서버 영상 위에 새 영상을 고르면PendingUpload가 된다" 를 단언한다.AfternoteEditorReceiverSnapshotTest의 JSON 리터럴·키를 v6 으로 갱신한다.
완료 조건
-
EditableMemorialVideo하위 타입이NoVideo · Uploaded · PendingUpload셋이다. -
persisted와selection을 동시에 드는 상태가 없다. - 스냅샷 키가 v6 이고 옛 v5 payload 를 읽지 않는다.
-
:feature:afternote:presentation:testDebugUnitTest통과, 이탈 가드 관련 테스트 단언은 수정 없이 그대로 지난다.
자식 이슈
No response
참고
- 선행: refactor(afternote): EditableMemorialVideo 의 네 상태를 sealed 로 봉인한다 — nullable 두 칸의 if/?: 를 exhaustive when 으로 (#1597 후속) #1901 (PR refactor(afternote): EditableMemorialVideo 의 네 상태를 sealed 로 봉인한다 (#1901) #2011) 이 sealed 봉인과 스냅샷 키 v5. 그 PR 본문의 "세 상태로 줄일지" 절이 이 이슈의 출발점이다.
- 순서상 feat(afternote): 임시저장 저장·발행 전환과 이어쓰기 프리필 코어 #808(이어쓰기 프리필)과 같은 파일을 건드리지 않으므로 독립 진행한다.
Metadata
Metadata
Assignees
Labels
area:afternote애프터노트 기능 영역애프터노트 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업동작 변경 없이 코드 구조·책임·경계를 개선하는 작업
Activity
test(afternote): 프로세스 사망 복원 테스트의 스냅샷 키를 v6 로 맞춘다 (#2114)