docs(creator): 시리즈 탭 Phase 2와 3 검증을 기록한다
This commit is contained in:
@@ -184,7 +184,7 @@
|
||||
|
||||
### Phase 2: API/DTO/Repository/ViewModel 계약 추가
|
||||
|
||||
- [ ] **Task 2.1: 시리즈 탭 DTO 추가**
|
||||
- [x] **Task 2.1: 시리즈 탭 DTO 추가**
|
||||
- 생성:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/data/CreatorChannelSeriesTabResponse.kt`
|
||||
- 작업:
|
||||
@@ -197,9 +197,10 @@
|
||||
- 기대 결과:
|
||||
- 신규 DTO 추가 후 컴파일이 PASS한다.
|
||||
- 검증 기록:
|
||||
- 구현 시 기록한다.
|
||||
- 2026-06-20 구현: `CreatorChannelSeriesTabResponse`, `CreatorChannelSeriesResponse`를 `series/data` package에 추가하고 `ContentSort`, `coverImageUrl`, pagination field, progress nullable field를 포함했다.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:compileDebugKotlin` PASS.
|
||||
|
||||
- [ ] **Task 2.2: 시리즈 탭 endpoint와 Repository method 추가**
|
||||
- [x] **Task 2.2: 시리즈 탭 endpoint와 Repository method 추가**
|
||||
- 수정:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelApi.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/data/CreatorChannelRepository.kt`
|
||||
@@ -212,9 +213,10 @@
|
||||
- 기대 결과:
|
||||
- API/Repository 추가 후 기존 Koin graph와 충돌 없이 컴파일된다.
|
||||
- 검증 기록:
|
||||
- 구현 시 기록한다.
|
||||
- 2026-06-20 구현: `CreatorChannelApi.getSeries()`에 `GET /api/v2/creator-channels/{creatorId}/series` endpoint와 `page`, `size`, `sort`, `Authorization` 전달을 추가하고, `CreatorChannelRepository.getSeries(creatorId, page, size, sort, token)` 위임 method를 추가했다.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:compileDebugKotlin` PASS.
|
||||
|
||||
- [ ] **Task 2.3: ViewModel RED 테스트 작성**
|
||||
- [x] **Task 2.3: ViewModel RED 테스트 작성**
|
||||
- 생성:
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesViewModelTest.kt`
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesPaginationTest.kt`
|
||||
@@ -238,9 +240,10 @@
|
||||
- 기대 결과:
|
||||
- production 구현 전 `CreatorChannelSeriesViewModel` 미구현으로 RED 실패한다.
|
||||
- 검증 기록:
|
||||
- 구현 시 기록한다.
|
||||
- 2026-06-20 기록: ULTRAWORK TDD 순서상 RED 테스트가 먼저 필요했으나, 실제 작업에서는 production skeleton이 먼저 추가되어 production 미구현 RED는 별도로 확보하지 못했다. 이후 동일 범위 내에서 `CreatorChannelSeriesViewModelTest`, `CreatorChannelSeriesPaginationTest`를 추가해 최초 로드/정렬/empty/progress/pagination/stale response 계약을 고정했다.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
|
||||
|
||||
- [ ] **Task 2.4: `CreatorChannelSeriesViewModel` 구현**
|
||||
- [x] **Task 2.4: `CreatorChannelSeriesViewModel` 구현**
|
||||
- 생성:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesViewModel.kt`
|
||||
- 수정:
|
||||
@@ -260,13 +263,14 @@
|
||||
- 기대 결과:
|
||||
- ViewModel 테스트가 GREEN이다.
|
||||
- 검증 기록:
|
||||
- 구현 시 기록한다.
|
||||
- 2026-06-20 구현: `CreatorChannelSeriesViewModel`을 추가하고 `loadSeries`, `changeSort`, `retrySeries`, `loadMore`, `consumePaginationErrorMessage`, `requestGeneration`, `DEFAULT_PAGE_SIZE=20` 상태 관리를 오디오 탭 패턴에 맞춰 구현했다. `AppDI`에 `CreatorChannelSeriesViewModel` Koin binding을 추가했다.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: Mapper/UI model 계약 추가
|
||||
|
||||
- [ ] **Task 3.1: Mapper RED 테스트 작성**
|
||||
- [x] **Task 3.1: Mapper RED 테스트 작성**
|
||||
- 생성:
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/series/CreatorChannelSeriesMapperTest.kt`
|
||||
- 테스트 케이스:
|
||||
@@ -285,9 +289,10 @@
|
||||
- 기대 결과:
|
||||
- production mapper 미구현으로 RED 실패한다.
|
||||
- 검증 기록:
|
||||
- 구현 시 기록한다.
|
||||
- 2026-06-20 기록: ULTRAWORK TDD 순서상 RED 테스트가 먼저 필요했으나, 실제 작업에서는 mapper production 파일이 먼저 추가되어 production 미구현 RED는 별도로 확보하지 못했다. 이후 `CreatorChannelSeriesMapperTest`를 추가해 subtitle, original/adult flag, owner별 progress, partial-null progress, progressScale clamp, blank title 제외 계약을 고정했다.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
|
||||
|
||||
- [ ] **Task 3.2: UI model과 mapper 구현**
|
||||
- [x] **Task 3.2: UI model과 mapper 구현**
|
||||
- 생성:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesUiModels.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/series/model/CreatorChannelSeriesMappers.kt`
|
||||
@@ -303,7 +308,8 @@
|
||||
- 기대 결과:
|
||||
- Mapper 테스트가 GREEN이다.
|
||||
- 검증 기록:
|
||||
- 구현 시 기록한다.
|
||||
- 2026-06-20 구현: `CreatorChannelSeriesItemUiModel`, `CreatorChannelSeriesProgressUiModel`, `toSeriesItemUiModels(isOwner)` mapper를 추가했다. subtitle은 blank segment를 제외하고 ` • `로 join하며, progress는 owner이거나 nullable field가 누락되면 생성하지 않고 `purchasedPaidContentRate / 100f`를 0f..1f로 clamp한다.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` PASS.
|
||||
|
||||
---
|
||||
|
||||
@@ -536,3 +542,9 @@
|
||||
|
||||
## Verification Log
|
||||
- 구현 완료 후 여러 Phase에 걸친 통합 검증, 회귀 검증, 최종 수동 확인 기록을 이 섹션에 누적한다.
|
||||
- 2026-06-20 코드 리뷰: Phase 2/3 범위의 API/DTO/Repository/ViewModel/mapper/UI model/test 코드를 검토했으며, 즉시 수정이 필요한 결함은 발견하지 못했다.
|
||||
- 2026-06-20 검증: 최초 `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.series.*"` 실행은 sandbox의 `~/.gradle` lock 파일 접근 제한으로 실패했고, escalated 재실행 결과 PASS.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Series*"` PASS. 테스트 리포트 기준 `CreatorChannelSeriesViewModelTest` 8건, `CreatorChannelSeriesPaginationTest` 5건, `CreatorChannelSeriesMapperTest` 11건 모두 failures/errors/skipped 0.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:compileDebugKotlin` PASS.
|
||||
- 2026-06-20 검증: `./gradlew --no-daemon :app:ktlintCheck` PASS.
|
||||
- 2026-06-20 검증: `git diff --check` PASS.
|
||||
|
||||
Reference in New Issue
Block a user