You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
refactor(afternote): EditableMemorialVideo 를 세 상태로 줄이고 저장 동작이 읽히는 이름으로 바꾼다 (#1901 후속) #2114
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 로 맞춘다.
EditableMemorialVideoTest 의 네 상태 JSON 왕복 테스트를 세 상태로 고치고, "서버 영상 위에 새 영상을 고르면 PendingUpload 가 된다" 를 단언한다. AfternoteEditorReceiverSnapshotTest 의 JSON 리터럴·키를 v6 으로 갱신한다.
완료 조건
EditableMemorialVideo 하위 타입이 NoVideo · Uploaded · PendingUpload 셋이다.
persisted 와 selection 을 동시에 드는 상태가 없다.
스냅샷 키가 v6 이고 옛 v5 payload 를 읽지 않는다.
:feature:afternote:presentation:testDebugUnitTest 통과, 이탈 가드 관련 테스트 단언은 수정 없이 그대로 지난다.
Activity
test(afternote): 프로세스 사망 복원 테스트의 스냅샷 키를 v6 로 맞춘다 (#2114)