[BE-06] application DTO — Command·Result 계약
작업 내용 (설계 의도)
변경 사항
UseCase 입출력 DTO를 신설한다(근거 TDD: ../TDD.md “API 계약”, DTO 흐름 Request→Command→Entity→Response). BE-07~09 UseCase가 공유하는 application 계약. domain 타입(BE-01)만 참조하고 BE-03/04/05 파일과 겹치지 않아 같은 wave 병렬 안전.
PurchaseLimitedDropCommand(userId·dropId·quantity·idempotencyKey).CreateLimitedDropCommand(productId·openAt·closeAt·limitedQuantity·perUserLimit·ownerUserId).LimitedDropPurchaseResult(orderId·dropId·status) +of(order, drop)팩토리.LimitedDropView(조회용: dropId·productId·status·openAt·closeAt·remaining·perUserLimit). perUserLimit은 FE QuantityStepper 상한·“1인당 N개” 안내에 필요(FE-02·design-db per_user_limit 정합).LimitedDropStatsResult(successCount·soldOutRejectCount·tooEarlyRejectCount) — FR-9.- 시간 타입
ZonedDateTime. Command는 UseCase 파라미터 형태.
의존
- BE-01 (LimitedDrop·LimitedDropStatus)
다이어그램
클래스 의존
flowchart LR PurchaseLimitedDropCommand --> LimitedDropPurchaseResult CreateLimitedDropCommand -.->|생성| LimitedDrop LimitedDropView -.->|from| LimitedDrop LimitedDropStatsResult
테스트 케이스
- LimitedDropPurchaseResult.of(order, drop)가 orderId·dropId·status를 정확히 매핑한다
- LimitedDropView가 LimitedDrop과 remaining을 결합해 생성되고 perUserLimit을 포함한다
- CreateLimitedDropCommand의 시간 필드가 ZonedDateTime으로 유지된다