Skip to content

refactor(afternote): EditableMemorialVideo 를 세 상태로 줄이고 저장 동작이 읽히는 이름으로 바꾼다 (#1901 후속) #2114

Closed

Description

@OnlyReadOneBook

작업 유형

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

참고

Metadata

Metadata

Labels

area:afternote애프터노트 기능 영역refactor동작 변경 없이 코드 구조·책임·경계를 개선하는 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions