[BE-06] partner 관리 application (Create·Reissue·Revoke·ChangeStatus UseCase)

작업 내용 (설계 의도)

변경 사항

근거 TDD: ../TDD.md “API 계약 B”·ADR-007. 운영자 관리 UseCase 오케스트레이션.

  • application/partner/usecase/CreatePartnerUseCase.kt — 오케스트레이션(DomainService만 호출, execute ≤10줄):
    1. userDomainService.register(syntheticEmail, randomPassword) — 연동 User 생성(+USER role). syntheticEmail=partner+{uuid}@integration.local, randomPassword=256-bit(미노출 → 실질 로그인 불가).
    2. userDomainService.assignRole(adminId, userId, "GOODS_SELLER") / "EVENT_HOST".
    3. partnerDomainService.createPartner(name, userId).
    4. 결과에 plainApiKey(1회 노출) 포함.
  • application/partner/usecase/ReissueApiKeyUseCase.kt·RevokeApiKeyUseCase.kt·ChangePartnerStatusUseCase.kt — 각 @Transactional, PartnerDomainService 위임.
  • application/partner/dto/*Command.kt·*Response.kt — Request→Command→Response 흐름. plainApiKey는 Response에만, 재조회 불가.

롤백: 각 UseCase @Transactional — 실패 시 전체 롤백(연동 User·Partner·키 원자적).

의존

  • BE-05

다이어그램

처리 흐름 (Partner 등록)

sequenceDiagram
    participant UC as CreatePartnerUseCase
    participant U as UserDomainService(기존)
    participant P as PartnerDomainService
    UC->>U: register(syntheticEmail, randomPassword)
    UC->>U: assignRole(adminId, userId, GOODS_SELLER)
    UC->>U: assignRole(adminId, userId, EVENT_HOST)
    UC->>P: createPartner(name, userId)
    P-->>UC: (Partner, IssuedApiKey)

테스트 케이스

  • CreatePartnerUseCase는 연동 User 생성·2개 role 부여·Partner 생성 후 plainApiKey를 반환한다.
  • ReissueApiKeyUseCase는 새 plainApiKey를 반환하고 구 키는 무효화된다.
  • RevokeApiKeyUseCase는 지정 키를 REVOKED로 만든다.
  • ChangePartnerStatusUseCase(SUSPENDED)는 Partner를 SUSPENDED로 만든다.
  • Partner 생성 중 role 부여가 실패하면 트랜잭션이 롤백되어 연동 User가 남지 않는다.
  • execute()는 DomainService만 호출하고 Repository를 직접 주입하지 않는다.