diff --git a/docs/20260617_크리에이터_채널_홈_API_구조정렬/plan-task.md b/docs/20260617_크리에이터_채널_홈_API_구조정렬/plan-task.md index 60b1a7ff..29ab7611 100644 --- a/docs/20260617_크리에이터_채널_홈_API_구조정렬/plan-task.md +++ b/docs/20260617_크리에이터_채널_홈_API_구조정렬/plan-task.md @@ -105,7 +105,7 @@ data class CreatorChannelHomeResponse( ### Phase 1: 현재 계약 고정과 이동 전 실패 확인 -- [ ] **Task 1.1: controller 테스트를 새 API 패키지 기준으로 이동해 실패 확인** +- [x] **Task 1.1: controller 테스트를 새 API 패키지 기준으로 이동해 실패 확인** - Files: - Move: `src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/in/web/CreatorChannelHomeControllerTest.kt` -> `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/adapter/in/web/CreatorChannelHomeControllerTest.kt` - Verify: `src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/in/web/CreatorChannelHomeController.kt` @@ -116,8 +116,9 @@ data class CreatorChannelHomeResponse( - GREEN: 아직 구현하지 않는다. 이 task는 이동 대상 controller 부재로 RED를 확인하는 단계다. - REFACTOR: 없음. - 기대 결과: 공개 API 조립 계층 이동 필요성이 테스트 실패로 고정된다. + - 검증 기록(2026-06-17): `./gradlew test --tests kr.co.vividnext.sodalive.v2.api.creator.channel.home.adapter.in.web.CreatorChannelHomeControllerTest` 실행 결과 `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/adapter/in/web/CreatorChannelHomeControllerTest.kt: (45, 13): Unresolved reference: CreatorChannelHomeController`로 실패했다. 새 API 패키지 controller가 아직 없어 실패한다는 RED 기대와 일치한다. -- [ ] **Task 1.2: facade 테스트를 추가해 공개 응답 변환 책임을 고정** +- [x] **Task 1.2: facade 테스트를 추가해 공개 응답 변환 책임을 고정** - Files: - Create: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/application/CreatorChannelHomeFacadeTest.kt` - Verify: `src/main/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/application/CreatorChannelHomeFacade.kt` @@ -128,16 +129,18 @@ data class CreatorChannelHomeResponse( - GREEN: 아직 구현하지 않는다. 이 task는 facade 책임 부재로 RED를 확인하는 단계다. - REFACTOR: 없음. - 기대 결과: API 조립 계층이 service 대신 response DTO 변환 책임을 갖는다는 기준이 고정된다. + - 검증 기록(2026-06-17): `./gradlew test --tests kr.co.vividnext.sodalive.v2.api.creator.channel.home.application.CreatorChannelHomeFacadeTest` 실행 결과 `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/application/CreatorChannelHomeFacadeTest.kt: (32, 22): Unresolved reference: CreatorChannelHomeFacade`로 실패했다. facade가 아직 없어 실패한다는 RED 기대와 일치한다. --- ### Phase 2: 공개 API 조립 계층 이동 -- [ ] **Task 2.1: response DTO를 `v2.api.creator.channel.home.dto`로 이동** +- [x] **Task 2.1: response DTO를 `v2.api.creator.channel.home.dto`로 이동** - Files: - Move: `src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/dto/CreatorChannelHomeResponse.kt` -> `src/main/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/dto/CreatorChannelHomeResponse.kt` - Modify: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/application/CreatorChannelHomeFacadeTest.kt` - Modify: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/adapter/in/web/CreatorChannelHomeControllerTest.kt` + - Modify: `src/test/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/application/CreatorChannelHomeQueryServiceTest.kt` - RED: Task 1.1, Task 1.2에서 response DTO 새 package import 기준 컴파일 실패를 확인한 상태를 유지한다. - GREEN: DTO 파일 package를 `kr.co.vividnext.sodalive.v2.api.creator.channel.home.dto`로 변경하고, domain model import는 새 도메인 패키지 이동 전까지 기존 경로를 임시로 사용한다. - 통과 확인: @@ -145,8 +148,9 @@ data class CreatorChannelHomeResponse( - Expected: facade가 아직 없으면 실패가 유지된다. DTO 자체 import 오류는 해결되어야 한다. - REFACTOR: `@JsonProperty`가 이동 중 누락되지 않았는지 파일 diff로 확인한다. - 기대 결과: 공개 응답 DTO가 API 조립 계층에 위치한다. + - 검증 기록(2026-06-17): `CreatorChannelHomeResponse.kt`를 `kr.co.vividnext.sodalive.v2.api.creator.channel.home.dto`로 이동하고 `CreatorChannelHomeQueryServiceTest`의 DTO import를 새 패키지로 갱신했다. 이후 `./gradlew test --tests kr.co.vividnext.sodalive.v2.creator.channel.application.CreatorChannelHomeQueryServiceTest` 실행 결과 `BUILD SUCCESSFUL`로 기존 DTO 변환 회귀 테스트 통과를 확인했다. -- [ ] **Task 2.2: `CreatorChannelHomeFacade`를 추가** +- [x] **Task 2.2: `CreatorChannelHomeFacade`를 추가** - Files: - Create: `src/main/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/application/CreatorChannelHomeFacade.kt` - Test: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/application/CreatorChannelHomeFacadeTest.kt` @@ -157,8 +161,9 @@ data class CreatorChannelHomeResponse( - Expected: PASS - REFACTOR: facade에 조회 정책이나 repository 접근이 들어가지 않았는지 확인한다. - 기대 결과: 공개 API 조립 계층의 응답 변환 책임이 controller에서 facade로 이동한다. + - 검증 기록(2026-06-17): `CreatorChannelHomeFacade`를 추가해 기존 `CreatorChannelHomeQueryService.getHome(...)` 결과를 `CreatorChannelHomeResponse.from(...)`으로 변환하도록 구현했다. `./gradlew test --tests kr.co.vividnext.sodalive.v2.api.creator.channel.home.application.CreatorChannelHomeFacadeTest` 실행 결과 `BUILD SUCCESSFUL`로 facade 단위 테스트 통과를 확인했다. -- [ ] **Task 2.3: controller를 `v2.api.creator.channel.home.adapter.in.web`으로 이동** +- [x] **Task 2.3: controller를 `v2.api.creator.channel.home.adapter.in.web`으로 이동** - Files: - Move: `src/main/kotlin/kr/co/vividnext/sodalive/v2/creator/channel/adapter/in/web/CreatorChannelHomeController.kt` -> `src/main/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/adapter/in/web/CreatorChannelHomeController.kt` - Modify: `src/test/kotlin/kr/co/vividnext/sodalive/v2/api/creator/channel/home/adapter/in/web/CreatorChannelHomeControllerTest.kt` @@ -171,6 +176,7 @@ data class CreatorChannelHomeResponse( - Run: `rg -n "class CreatorChannelHomeController|/\\{creatorId\\}/home" src/main/kotlin/kr/co/vividnext/sodalive/v2` - Expected: home controller mapping은 새 API 패키지 controller 1건만 확인된다. - 기대 결과: Spring mapping 충돌 없이 홈 API controller가 API 조립 계층에 위치한다. + - 검증 기록(2026-06-17): `CreatorChannelHomeController`를 `kr.co.vividnext.sodalive.v2.api.creator.channel.home.adapter.in.web`으로 이동하고 직접 query service 주입 대신 `CreatorChannelHomeFacade` 주입으로 변경했다. `./gradlew test --tests kr.co.vividnext.sodalive.v2.api.creator.channel.home.adapter.in.web.CreatorChannelHomeControllerTest` 실행 결과 `BUILD SUCCESSFUL`로 controller 테스트 통과를 확인했다. `rg -n "class CreatorChannelHomeController|@GetMapping\(\"/\{creatorId\}/home\"\)|package kr\.co\.vividnext\.sodalive\.v2\.creator\.channel\.adapter\." src/main/kotlin/kr/co/vividnext/sodalive/v2` 실행 결과 home controller class와 `@GetMapping("/{creatorId}/home")`은 새 API 패키지 controller 1건만 확인했다. --- @@ -282,4 +288,4 @@ data class CreatorChannelHomeResponse( - 문서 생성 검증(2026-06-17): `docs/agent-guides/작업절차.md`, `docs/agent-guides/문서유지보수.md` 규칙에 따라 `docs/20260617_크리에이터_채널_홈_API_구조정렬/prd.md`와 `docs/20260617_크리에이터_채널_홈_API_구조정렬/plan-task.md`를 생성했다. - Gradle 명령 유효성 검증(2026-06-17): sandbox 내 `./gradlew tasks --all`은 `~/.gradle` wrapper lock 파일 접근 권한 문제로 실패했다. 승인 후 동일 명령을 재실행해 `BUILD SUCCESSFUL`을 확인했다. -- 구현 검증 기록: 아직 없음. 구현 진행 시 각 task 아래에 무엇을, 왜, 어떻게 검증했는지 실행 명령과 결과를 누적한다. +- Phase 1 RED 검증(2026-06-17): controller 테스트를 새 API 패키지로 이동하고 facade 테스트를 추가한 뒤 각 Gradle test filter를 실행했다. `CreatorChannelHomeController`와 `CreatorChannelHomeFacade`의 새 API 패키지 production class 미존재로 `compileTestKotlin`이 실패해 Phase 1의 실패 확인 목표를 충족했다.