Skip to content

feat(afternote): 추억 노트에 추모 음성 첨부·녹음 경로를 연다 (#1118 분리) #1734

Closed as not planned

Description

@1hyok

작업 유형

enhancement — 신규 기능·기존 기능 개선

주 담당 모듈

afternote — 애프터노트

개요

부모 #1118 (추억 노트 미디어 음성 녹음 첨부) 에서 첨부·녹음 경로 몫만 분리한 이슈다. PR #1625 가 구현한다.

문제 — 서버 playlist.memorialAudioUrl 자리는 생겼는데(Afternote-BE#268, 2026-08-30) FE 는 MediaKind 에 AUDIO 가 없고, 편집 화면에 음성을 붙일 슬롯·시트 옵션·녹음 인텐트·업로드 경로가 없다.

변경

  • MediaKind.AUDIO 추가, MemorialMediaUploadRepositoryImpl.resolve 의 when 으로 누락을 컴파일 에러로 잡는다
  • ResolveMemorialMediaForSaveUseCase 오디오 갈래 + playlist.memorialAudioUrl 저장·프리필 결선 (AfternoteTypeForm.Memorial.audioUrl)
  • POST는 전체 값으로 생성하고 PATCH는 #1617의 MemorialPatchPayload/FieldPatch로 음성 유지(키 생략)·삭제(null)·교체(URL)를 구분한다. 원본 상세 기준값과 현재 폼을 비교해 음성만 바꾸면 사진·영상·곡을 재전송하지 않는다
  • fix(afternote): 프로세스 사망 복원 뒤 상세 재조회 프리필이 미저장 편집을 덮는다 (#1617 후속) #1732 복원 가드를 먼저 포함해 음성을 지운 폼이 프로세스 재생성 뒤 서버 프리필로 덮이지 않고 삭제 PATCH로 저장되도록 한다
  • 녹음 인텐트 RecordSoundContract — RECORD_SOUND_ACTION 은 결과 URI 를 돌려주는 계약이라 TakePicture/CaptureVideo 와 반대. 녹음 앱 없는 기기는 기존 ActivityNotFoundException 갈래 재사용
  • MemorialMediaSourceBottomSheet 에 MemorialMediaTarget.AUDIO (파일 선택·녹음·삭제), 아이콘은 core_ui_ic_mic 재사용
  • 업로드는 MemorialAudioUploadRepository (feature 로컬) — 공용 업로드의 jpg 확장자 폴백을 피한다. 지원 형식 판정 MemorialAudioFormats 를 도메인 한 벌로 두고 amr·3gpp 는 첨부 시점에 스낵바로 막는다
  • UI 자리는 시안 부재로 FE 확정 — 「장례식에 남길 영상」 뒤 「남기고 싶은 목소리」 섹션, 영상 슬롯 규격 그대로

완료 조건

  • 추억 노트 편집기에서 파일 선택·녹음으로 음성을 첨부·삭제할 수 있다
  • 저장 요청에 playlist.memorialAudioUrl 이 실리고, 수정 진입 시 프리필로 되돌아온다
  • 서버 미허용 형식(amr·3gpp 등)은 첨부 단계에서 차단된다 — 저장 400 으로 미루지 않는다
  • 녹음 앱 없는 기기에서 크래시 없이 안내된다
  • 위 규칙이 JVM 단위 테스트로 고정된다 (MemorialAudioFormatsTest 의 서버 AUDIO_EXTENSIONS 대칭 포함)

참고

구현 검증

PR #1625 51d18d177에서 afternote domain/data/presentation 단위 테스트 417건(실패·오류·skip 0), 3개 모듈 ktlint, 앱 main/unitTest/androidTest Kotlin 컴파일을 통과했다. 음성 전용 PATCH와 타 슬롯 보존, 음성 삭제 후 재진입 및 복원한 음성 편집의 저장을 회귀 테스트로 확인했다. 실기기 녹음·서버 왕복 QA와 BE#277 배포 게이트는 남아 있다.

Activity

  1. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 2, 2026
  2. 1hyok commented on Sep 11, 2026

    @1hyok
    CollaboratorAuthor

    시안에 없는 기능이라 닫습니다. 판정 근거는 PR #1625 의 닫는 코멘트에 있습니다. 본문의 "UI 자리는 시안 부재로 FE 확정" 은 시안 부재를 착수 사유로 읽은 오독이었습니다. FE 재량은 시안에 있는 화면의 세부까지이고, 시안에 없는 기능을 재량으로 만들지 않습니다.

  3. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:afternote애프터노트 기능 영역enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions