[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줄):userDomainService.register(syntheticEmail, randomPassword)— 연동 User 생성(+USER role). syntheticEmail=partner+{uuid}@integration.local, randomPassword=256-bit(미노출 → 실질 로그인 불가).userDomainService.assignRole(adminId, userId, "GOODS_SELLER")/"EVENT_HOST".partnerDomainService.createPartner(name, userId).- 결과에
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를 직접 주입하지 않는다.