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): 종류별 생성 payload를 sealed interface로 묶는다 #1956
애프터노트의 종류별 생성 payload를 sealed interface로 묶어, 생성 요청이 지원되는 종류 중 하나라는 계약을 도메인 타입으로 표현한다. 각 종류의 전용 필드는 개별 구현체에 유지하고, 생성 요청을 공통 타입으로 전달·처리하는 경계에서 exhaustive when으로 분기 누락을 확인할 수 있게 한다.
현재 CreateAccountPayload는 SOCIAL·BUSINESS가 공유하고, CreateGalleryPayload 및 추억 노트 생성 payload는 별도로 존재한다. 필드가 비슷하다는 이유로 모든 필드를 하나의 data class에 합치는 것이 아니라, 종류별 유효한 데이터 조합을 보존하는 합 타입으로 정리한다.
작업 범위
기존 CreateAfternoteInput 등 생성 요청을 묶는 타입의 현황을 먼저 확인하고, 역할이 겹치는 sealed 계층을 중복 도입하지 않는다.
지원하는 생성 종류를 sealed interface의 구현체로 표현하고, 에디터에서 생성 요청을 만드는 경계와 이를 소비하는 저장 경로에 적용한다.
SOCIAL·BUSINESS를 어떻게 구별할지 명시한다. 동일한 계정 필드는 공통 데이터 객체로 재사용할 수 있지만, Account 하나로 묶어 종류 구분이 사라지지 않게 한다.
공통 필드를 부모 인터페이스에 일괄 노출하지 않고, 실제 공통 소비 계약에 필요한 경우에만 올린다.
종류별 전용 필드와 기존 서버 요청 계약을 보존한다.
완료 조건
기존 생성 입력 타입과 책임이 중복되지 않는 sealed 생성 요청 모델이 적용된다.
종류별 필수 데이터와 전용 필드가 각 구현체에 유지된다.
SOCIAL·BUSINESS를 포함한 지원 종류의 매핑이 명확하고, 공통 처리 지점에서 분기를 빠짐없이 처리한다.
생성 요청 소비 경로가 새 모델을 사용하며, 불필요해진 기존 래퍼·변환은 제거된다.
종류별 서버 요청 매핑과 생성 동작이 유지되는지 적절한 컴파일·회귀 검증으로 확인한다.
참고
2026-09-08 현재 구현을 다시 대조한 결과 아래 완료 조건은 기존 CreateAfternoteInput과 소비 경로가 이미 충족한다. 중복 sealed 계층이나 종류별 payload 평탄화를 새로 도입하지 않고 완료한다.
CreateAfternoteInput은 Social·Business·Gallery·Memorial 네 구현체를 가진 sealed interface다. SOCIAL/BUSINESS는 CreateAccountPayload 데이터를 재사용하면서 구분용 타입은 유지한다.
AfternoteEditorFormMapper.buildCreateInput → SaveAfternoteCommand.Create → executeSaveCommand가 이 모델을 사용한다. 저장 분기는 else 없는 when이며, data 매퍼의 toSocialRequest/toBusinessRequest는 각각 SOCIAL/BUSINESS category를 보낸다.
확인 기준: feat(afternote): 임시저장 조회와 저장 payload를 분리한다 (#1762) #1763 HEAD a4379e7b92f4a5acd0c80f16ded412a0a6348aaf, 이를 통합한 #1626의 88073fddc에서 afternote data 97개·presentation 270개 테스트 및 두 모듈 ktlintCheck 통과. 생성 종류별 서버 요청/임시저장 wire 회귀를 포함한다.
Activity