docs(creator): 오디오 탭 Phase 3 검증을 기록한다
This commit is contained in:
@@ -278,13 +278,14 @@
|
||||
|
||||
### Phase 3: Mapper/UI model 정책 구현
|
||||
|
||||
- [ ] **Task 3.1: 오디오 UI model과 mapper RED 테스트 작성**
|
||||
- [x] **Task 3.1: 오디오 UI model과 mapper RED 테스트 작성**
|
||||
- 생성:
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/CreatorChannelAudioMapperTest.kt`
|
||||
- 테스트 케이스:
|
||||
- `themes` 응답 앞에 `전체` tab이 추가된다.
|
||||
- `themeId == null`이면 `전체` tab이 selected 상태다.
|
||||
- 응답 `themeId`가 특정 id이면 해당 서버 theme tab만 selected 상태다.
|
||||
- 응답 `themeId`가 서버 `themes`에 없으면 UI 무선택 상태를 피하기 위해 `전체` tab selected 상태로 fallback하고, effective selected themeId를 `null`로 정규화한다.
|
||||
- `seriesName`이 있으면 secondary text가 `duration • seriesName`이다.
|
||||
- `seriesName == null` 또는 blank이면 secondary text가 `duration`이다.
|
||||
- `duration == null`이면 item mapper 결과에서 제외된다.
|
||||
@@ -297,8 +298,12 @@
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioMapperTest"`
|
||||
- 기대 결과:
|
||||
- mapper 미구현 상태에서 RED 실패한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-19 `CreatorChannelAudioMapperTest`를 추가해 synthetic `전체` tab, 선택 theme, `duration • seriesName`, blank/null series, `duration == null` 제외, 상태 우선순위, tag/badge, 소장률 생성 조건을 고정했다.
|
||||
- 2026-06-19 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioMapperTest"` 실행 결과 `audio/model` 패키지와 mapper 심볼 미존재로 `compileDebugUnitTestKotlin` 실패를 확인했다.
|
||||
- 2026-06-19 리뷰 후속으로 응답 `themeId`가 서버 `themes`에 없는 경우 `전체` selected fallback 테스트와 effective selected themeId `null` 정규화 테스트를 추가했다. 구현 전 `effectiveSelectedThemeId` 심볼 미존재로 RED 실패를 확인했다.
|
||||
|
||||
- [ ] **Task 3.2: 오디오 UI model과 mapper 구현**
|
||||
- [x] **Task 3.2: 오디오 UI model과 mapper 구현**
|
||||
- 생성:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/model/CreatorChannelAudioUiModels.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/audio/model/CreatorChannelAudioMappers.kt`
|
||||
@@ -313,8 +318,17 @@
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioMapperTest"`
|
||||
- 기대 결과:
|
||||
- mapper 테스트가 PASS한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-19 `CreatorChannelAudioUiModels.kt`와 `CreatorChannelAudioMappers.kt`를 추가하고, `CreatorChannelAudioViewModel`의 임시 theme/rate/content 매핑을 audio model mapper로 이동했다.
|
||||
- 2026-06-19 `CreatorChannelAudioContentUiModel`은 live replay item과 동일한 상태/tag 정책을 따르되, secondary text는 PRD 계약대로 `duration • seriesName` 또는 `duration`으로 매핑한다.
|
||||
- 2026-06-19 리뷰 후속으로 선택된 `themeId`가 응답 `themes`에 없을 때 UI 무선택 상태를 피하기 위해 synthetic `전체` tab 선택 상태로 fallback하도록 결정하고 mapper에 반영했다.
|
||||
- 2026-06-19 fallback 정책은 표시 상태뿐 아니라 내부 선택 상태에도 적용한다. `effectiveSelectedThemeId()`가 없는 themeId를 `null`로 정규화하고, `CreatorChannelAudioViewModel.Content.selectedThemeId`, 소장률 표시 조건, 정렬 변경 후속 요청이 모두 정규화된 `null` 기준을 사용하도록 보강했다.
|
||||
- 2026-06-19 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioMapperTest"` 실행 결과 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioViewModelTest"` 실행 결과 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioPaginationTest"` 실행 결과 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 후속 리뷰 지적으로 선택 테마 요청 뒤 서버가 없는 `themeId`를 응답하면 ViewModel 내부 `selectedThemeId`가 이전 선택값으로 남는 문제가 확인됐다. `CreatorChannelAudioViewModelTest`에 정렬 후속 요청이 정규화된 `null` themeId를 사용하는 회귀 테스트를 추가하고, 첫 페이지 성공 응답 처리 시 private `selectedThemeId`도 `effectiveSelectedThemeId()`로 갱신하도록 수정했다.
|
||||
|
||||
- [ ] **Task 3.3: sort popup 공용화 여부 반영**
|
||||
- [x] **Task 3.3: sort popup 공용화 여부 반영**
|
||||
- 수정 후보:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/live/ui/CreatorChannelLiveSortPopup.kt`
|
||||
- `app/src/main/res/layout/view_creator_channel_live_sort_menu.xml`
|
||||
@@ -330,6 +344,9 @@
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioMapperTest"`
|
||||
- 기대 결과:
|
||||
- 라이브 탭 정렬 테스트와 오디오 mapper 테스트가 모두 PASS한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-19 탐색 결과 `CreatorChannelLiveSortPopup`과 `view_creator_channel_live_sort_menu.xml`은 class/layout/id/test가 live 전용 이름에 강하게 묶여 있고, Phase 3 mapper 구현에는 즉시 필요하지 않음을 확인했다.
|
||||
- 2026-06-19 Phase 3에서는 sort popup 공용화를 보류하고 live sort 관련 production/resource 파일을 변경하지 않았다. 공용화 필요 여부는 오디오 Sort-bar 연결이 진행되는 Phase 5에서 다시 판단한다.
|
||||
|
||||
---
|
||||
|
||||
@@ -576,4 +593,16 @@
|
||||
---
|
||||
|
||||
## Verification Log
|
||||
- 아직 통합 검증을 실행하지 않았다. 구현 단계에서 각 Phase/Task의 검증 기록과 최종 통합 검증 결과를 누적한다.
|
||||
- 2026-06-19 Phase 3 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.*"` 실행 결과 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 Phase 3 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Audio*"` 실행 결과 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 Phase 3 검증으로 `./gradlew :app:compileDebugKotlin` 실행 결과 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 Phase 3 검증으로 `./gradlew :app:ktlintCheck` 실행 결과 BUILD SUCCESSFUL. 기존 `.editorconfig`의 `disabled_rules` deprecation 경고가 출력됐으나 실패는 발생하지 않았다.
|
||||
- 2026-06-19 Phase 3 검증으로 `git diff --check` 실행 결과 whitespace error 없음.
|
||||
- 2026-06-19 리뷰 게이트에서 PRD의 `themeId`가 응답 `themes`에 없을 때 fallback 결정/검증 누락이 발견되어, `전체` tab selected fallback 테스트와 구현을 추가했다. 구현 전 해당 테스트 RED 실패를 확인했고, 수정 후 오디오 테스트/컴파일/ktlint/diff check와 후속 컨텍스트 리뷰가 PASS했다.
|
||||
- 2026-06-19 후속 리뷰 지적으로 fallback 시 UI selected 상태와 내부 `selectedThemeId`/소장률/후속 요청 기준이 불일치할 수 있어 `effectiveSelectedThemeId()` 정규화 정책을 추가했다. 구현 전 mapper/ViewModel 테스트 RED 실패를 확인했고, 수정 후 `CreatorChannelAudioMapperTest`, `CreatorChannelAudioViewModelTest`, `compileDebugKotlin --no-daemon`이 BUILD SUCCESSFUL.
|
||||
- 2026-06-19 정규화 후 최종 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.*" --no-daemon`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*Audio*" --no-daemon`, `./gradlew :app:ktlintCheck --no-daemon`, `git diff --check` 실행 결과 모두 PASS했다.
|
||||
- 2026-06-19 후속 리뷰 지적(`selectedThemeId` 정규화가 ViewModel 내부 상태까지 반영되지 않음)에 대해 선택 테마 응답이 서버 themes에 없는 `themeId`를 반환하는 RED 테스트를 추가했고, `CreatorChannelAudioViewModel` 첫 페이지 성공 경로에서 private `selectedThemeId`를 `effectiveSelectedThemeId()`로 갱신하도록 수정했다.
|
||||
- 2026-06-19 위 수정 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioViewModelTest" --no-daemon -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false` 실행 결과 BUILD SUCCESSFUL. 동일 실행에서 `compileDebugKotlin`도 PASS했다. `git diff --check` 실행 결과 whitespace error 없음.
|
||||
- 2026-06-19 Phase 3 코드 리뷰 재검증으로 `CreatorChannelAudioMappers.kt`, `CreatorChannelAudioUiModels.kt`, `CreatorChannelAudioViewModel.kt`, `CreatorChannelAudioMapperTest.kt`, `CreatorChannelAudioViewModelTest.kt`를 확인했다. 응답 `themeId` fallback 정규화가 theme UI, rate UI, `Content.selectedThemeId`, ViewModel private `selectedThemeId`, 후속 정렬 요청에 일관되게 반영되어 추가 수정 이슈는 발견하지 않았다.
|
||||
- 2026-06-19 Phase 3 코드 리뷰 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioMapperTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioViewModelTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.audio.CreatorChannelAudioPaginationTest"` 실행 결과 모두 BUILD SUCCESSFUL. 최초 샌드박스 실행은 `~/.gradle` wrapper lock 파일 접근 권한으로 실패해 승인 후 재실행했다.
|
||||
- 2026-06-19 Phase 3 코드 리뷰 재검증으로 `git diff --check` 실행 결과 whitespace error 없음.
|
||||
|
||||
Reference in New Issue
Block a user