[BE-09] PartnerAdminApiController (운영자 관리 API)
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “API 계약 B”. 운영자용 Partner 관리 엔드포인트. hasRole('ADMIN').
presentation/partner/controller/PartnerAdminApiController.kt(/api/admin/partners):POST /→ CreatePartnerUseCase →201 { partnerId, name, status, plainApiKey }.POST /{partnerId}/api-keys→ ReissueApiKeyUseCase →201 { keyId, plainApiKey }.DELETE /{partnerId}/api-keys/{keyId}→ RevokeApiKeyUseCase →204.PATCH /{partnerId}/status→ ChangePartnerStatusUseCase →200 { partnerId, status }.GET /{partnerId}/audit-logs?from&to&page&size→ ListPartnerAuditLogsUseCase →200 Page.
presentation/partner/dto/request/*Request.kt—toCommand()변환.@PreAuthorize("hasRole('ADMIN')").- Controller는 Entity를 그대로 반환하지 않고 Response DTO 반환.
의존
- BE-06, BE-07
다이어그램
클래스 의존
flowchart LR Ctrl["PartnerAdminApiController"] Create["CreatePartnerUseCase"] Reissue["ReissueApiKeyUseCase"] Revoke["RevokeApiKeyUseCase"] Status["ChangePartnerStatusUseCase"] List["ListPartnerAuditLogsUseCase"] Ctrl --> Create Ctrl --> Reissue Ctrl --> Revoke Ctrl --> Status Ctrl --> List
테스트 케이스
- ADMIN이 POST /api/admin/partners 호출 시 201과 plainApiKey를 받는다 (MockMvc + TestContainers).
- 비ADMIN 요청은 403을 받는다.
- POST /{id}/api-keys는 새 plainApiKey를 반환한다.
- DELETE /{id}/api-keys/{keyId}는 204를 반환한다.
- PATCH /{id}/status로 SUSPENDED 전환 시 200과 변경된 status를 반환한다.
- GET /{id}/audit-logs는 신규 파트너에 대해 빈 Page를 반환한다.