[BE-08] CreateLimitedDropUseCase — 판매자 회차 개설 + Redis 시드

작업 내용 (설계 의도)

변경 사항

판매자가 한정판 회차를 개설하는 UseCase(근거 TDD: “Release Scenario” 3단계 시드). execute() 10줄 이내, @Transactional, DomainService만 호출. 소유권은 ownerUserId(Command)로 해석. 롤백: drop 삭제 + Redis 키 만료.

  • CreateLimitedDropUseCase.execute(command)limitedDropDomainService.openDrop(command) 위임.
  • DomainService가 LimitedDrop 저장 + seedIfAbsent로 Redis 카운터 시드(limitedQuantity)를 원자 수행.
  • 대상 productId의 재고(Stock)와 limitedQuantity 정합은 DomainService 검증(limitedQuantity ≤ 현재 stock).

의존

  • BE-03 (LimitedDropDomainService), BE-06 (CreateLimitedDropCommand)

다이어그램

클래스 의존

flowchart LR
    CreateLimitedDropUseCase --> LimitedDropDomainService

테스트 케이스

  • execute가 회차를 저장하고 Redis 카운터를 limitedQuantity로 시드한다 (MockK)
  • limitedQuantity가 현재 재고를 초과하면 개설이 거부된다
  • openAt≥closeAt이면 생성 검증에서 거부된다