### 작업 유형 refactor — 동작 변경 없는 구조·책임·경계 개선 ### 주 담당 모듈 afternote — 애프터노트 ### 개요 에디터 폼 매퍼에서 생성 요청과 수정 비교 스냅샷을 만들 때 같은 곡 객체 조립과 영상 URL 정규화가 반복된다. 현재 동작을 유지하면서 각 변환 규칙을 private 함수 한 곳으로 모은다. - `Song`을 `MemorialSongPayload`로 바꾸는 객체 조립을 생성 요청과 현재값 스냅샷이 공유한다. - 생성 요청, 서버 미디어, 에디터 미디어의 영상 변환에서 빈 영상 URL을 null로 만드는 규칙과 썸네일 정규화·객체 생성을 공유한다. - 곡 순서, 빈 목록, URL 및 썸네일의 null·공백 처리, PATCH의 미변경·삭제·설정 의미를 유지한다. - DTO, 도메인 입력 계약, 카테고리별 스냅샷 구조는 바꾸지 않는다. 완료 조건: presentation 단위 테스트와 ktlint를 통과하고, PR 전체 diff에는 매퍼의 중복 변환 정리만 포함한다. ### 참고 #2163(PR #2164)의 카테고리별 스냅샷 분리 뒤에 적용한다. 새 기능이나 서버 계약 결정에 의존하지 않는 내부 정리다. PR base를 #2164 브랜치로 두어 기존 구조 변경과 이번 변환 정리를 별도로 읽을 수 있게 한다.
Activity
github-actions commentedon Sep 25, 2026
이 이슈를 맡은 PR 은 #2167 다 (base
refactor/2163-category-snapshot).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.refactor(afternote): 수정 입력의 수신자 id 계약 통합 (#2166)
refactor(afternote): 미디어 URL 인자 이름 통합 (#2166)