[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이면 생성 검증에서 거부된다