[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.kttoCommand() 변환. @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를 반환한다.