[BE-05] FeatureFlag 애플리케이션 계층 (UseCase·Command·Response)
작업 내용 (설계 의도)
변경 사항
관리 API가 호출하는 UseCase + DTO 흐름(Request→Command→Entity→Response). 근거 TDD: ../TDD.md “인터페이스 시그니처”·API 계약. 각 UseCase execute() 10줄 이내, @Transactional은 UseCase에, DomainService만 주입(no-repo-in-usecase).
- UseCase:
CreateFeatureFlagUseCase·UpdateFeatureFlagUseCase·ArchiveFeatureFlagUseCase·ActivateFeatureFlagUseCase·GetFeatureFlagUseCase·ListFeatureFlagsUseCase·GetFeatureFlagAuditLogsUseCase— 전부FeatureFlagDomainService만 주입. - Command:
CreateFeatureFlagCommand·UpdateFeatureFlagCommand·ArchiveFeatureFlagCommand·ActivateFeatureFlagCommand·ListFeatureFlagsCommand·GetAuditLogsCommand(actorUserId +page·size→Pageable변환). - Response:
FeatureFlagResponse(of(entity))·FeatureFlagAuditLogResponse. strategy는 strategyType 판별 형태로 직렬화(TDD API 계약). GetFeatureFlagAuditLogsUseCase는ListFeatureFlagAuditLogsResponse(total 포함)를 반환한다 —{content, totalElements, totalPages, pageNumber, pageSize},of(page: Page<FeatureFlagAuditLog>)생성(레포ListMcpAuditLogsResponse선례). FE S5 “1/3” 총페이지 표시 요구 충족(senior-pm 정합 #1).ListFeatureFlagsUseCase는List<FeatureFlagResponse>배열 직반환을 유지한다(활성 플래그 소량·페이징 UI 없음 — 확정).- 조회 UseCase는
@Transactional(readOnly = true).
의존
- BE-04 (FeatureFlagDomainService)
다이어그램
클래스 의존
flowchart LR CreateUC["CreateFeatureFlagUseCase"] --> DS["FeatureFlagDomainService"] UpdateUC["UpdateFeatureFlagUseCase"] --> DS ArchiveUC["ArchiveFeatureFlagUseCase"] --> DS GetUC["GetFeatureFlagUseCase"] --> DS ListUC["ListFeatureFlagsUseCase"] --> DS AuditUC["GetFeatureFlagAuditLogsUseCase"] --> DS DS -.->|반환| Response["FeatureFlagResponse"]
테스트 케이스 (MockK, DomainService 모킹)
- CreateFeatureFlagUseCase.execute는 command를 DomainService.create에 위임하고 FeatureFlagResponse를 반환한다
- ListFeatureFlagsUseCase는 status·type 필터를 command로 전달하고 빈 결과 시 빈 리스트를 반환한다
- ArchiveFeatureFlagUseCase.execute는 DomainService.archive를 호출한다
- GetFeatureFlagUseCase는 존재하지 않는 key에서 DomainService가 던진 404를 그대로 전파한다
- GetFeatureFlagAuditLogsUseCase는 page/size를 Pageable로 전달하고 totalElements·totalPages를 담은 ListFeatureFlagAuditLogsResponse를 반환한다
- ListFeatureFlagAuditLogsResponse.of는 Page의 총건수·총페이지를 정확히 매핑한다(예: total 25, size 10 → totalPages 3)
- FeatureFlagResponse.of는 VariantBucketing 전략을 variants 배열로 직렬화한다