From 654a74aacf057b6dba0fbfc930a49d742666ed5c Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 13 Jun 2026 17:20:17 +0900 Subject: [PATCH] =?UTF-8?q?docs(creator):=20=EC=B1=84=EB=84=90=20=ED=99=88?= =?UTF-8?q?=20Phase=204=20=EA=B2=80=EC=A6=9D=EC=9D=84=20=EA=B8=B0=EB=A1=9D?= =?UTF-8?q?=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20260611_크리에이터_채널_홈_탭/plan-task.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/docs/20260611_크리에이터_채널_홈_탭/plan-task.md b/docs/20260611_크리에이터_채널_홈_탭/plan-task.md index 2272d2c8..ace8f646 100644 --- a/docs/20260611_크리에이터_채널_홈_탭/plan-task.md +++ b/docs/20260611_크리에이터_채널_홈_탭/plan-task.md @@ -233,7 +233,7 @@ ### Phase 4: UI 모델/매퍼/ViewModel 구현 -- [ ] **Task 4.1: 홈 응답 매퍼 RED 테스트 작성** +- [x] **Task 4.1: 홈 응답 매퍼 RED 테스트 작성** - 생성: - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeMapperTest.kt` - 작업: @@ -247,7 +247,7 @@ - 기대 결과: - UI model/mapper 미구현으로 RED 실패한다. -- [ ] **Task 4.2: UI model과 mapper 구현** +- [x] **Task 4.2: UI model과 mapper 구현** - 생성: - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeUiModels.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelHomeMappers.kt` @@ -262,7 +262,7 @@ - 기대 결과: - 매퍼 테스트가 PASS한다. -- [ ] **Task 4.3: title-bar 상태 순수 모델 테스트와 구현** +- [x] **Task 4.3: title-bar 상태 순수 모델 테스트와 구현** - 생성: - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelTitleBarStateTest.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/model/CreatorChannelTitleBarState.kt` @@ -276,7 +276,7 @@ - 기대 결과: - title-bar 상태 테스트가 PASS한다. -- [ ] **Task 4.4: ViewModel RED 테스트와 구현** +- [x] **Task 4.4: ViewModel RED 테스트와 구현** - 생성: - `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModelTest.kt` - `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelHomeViewModel.kt` @@ -538,3 +538,12 @@ - 2026-06-13: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.common.*" --tests "kr.co.vividnext.sodalive.v2.creator.channel.*" --tests "kr.co.vividnext.sodalive.v2.main.home.*" :app:compileDebugKotlin`를 실행해 `BUILD SUCCESSFUL`을 확인했다. - 2026-06-13: 패키지 이동 후 `./gradlew :app:ktlintCheck`를 실행해 `BUILD SUCCESSFUL`을 확인했다. - 2026-06-13: 사용자 확인에 따라 백엔드 `CreatorActivityType` 원본 enum이 `LIVE`, `AUDIO`, `COMMUNITY`, `LIVE_REPLAY` 대문자 code를 내려주는 계약임을 Phase 2/3 작업 항목에 명시했다. 이후 코드리뷰에서는 별도 서버 계약 변경 근거가 없는 한 크리에이터 채널 홈 DTO의 `CreatorActivityType` 직접 사용과 Gson enum TypeAdapter 부재를 대소문자 대응 문제로 제기하지 않는다. 이번 단계는 문서 수정만 수행했으며 빌드/테스트는 실행하지 않았다. +- 2026-06-13: Phase 4 TDD RED로 `CreatorChannelHomeMapperTest`, `CreatorChannelTitleBarStateTest`, `CreatorChannelHomeViewModelTest`를 먼저 추가했다. 각 focused 명령은 `CreatorChannelHomeUiModels`, `CreatorChannelHomeMappers`, `CreatorChannelTitleBarState`, `CreatorChannelHomeViewModel` 미구현 참조로 `compileDebugUnitTestKotlin` 실패함을 확인했다. +- 2026-06-13: Phase 4 GREEN으로 UI state/tab/header/section/SNS 모델, `CreatorChannelHomeResponse.toUiContent()`, title-bar 상태 모델, `CreatorChannelHomeViewModel`, `AppDI` ViewModel 등록을 최소 구현했다. `ic_bar_bell_colored`는 기존 `drawable-mdpi/ic_bar_bell_colored.png`가 있어 신규 리소스를 추가하지 않았다. +- 2026-06-13: Phase 4 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeMapperTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelTitleBarStateTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeViewModelTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"`, `./gradlew :app:compileDebugKotlin` 모두 `BUILD SUCCESSFUL`을 확인했다. 병렬 Gradle 실행 중 KSP 캐시 `StreamCorruptedException`이 한 차례 발생해 `./gradlew --stop` 후 순차 재실행했다. +- 2026-06-13: Phase 4 자체 검증 중 `CreatorChannelHomeViewModelTest`의 `null data` 케이스 assertion이 실제로는 API failure만 검증하고 있음을 확인해 별도 `홈 API null data는 Error와 unknown toast를 emit한다` 테스트를 추가했다. 이후 `./gradlew :app:ktlintCheck`는 unused import와 긴 `whenever(...)` 라인으로 실패했으며, 테스트 파일 import/line wrapping을 수정했다. +- 2026-06-13: Phase 4 보강 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeViewModelTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 재실행해 모두 `BUILD SUCCESSFUL`을 확인했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation 경고는 기존 설정 경고로 이번 변경과 무관하다. +- 2026-06-13: Phase 4 review-work gate에서 code quality 리뷰어가 `chatRoomIdLiveData`를 일반 `MutableLiveData`로 두면 화면 재생성/재구독 시 채팅방 이동이 반복될 수 있다고 지적해 FAIL했다. 기존 `DmChatEvent.consume()` 패턴을 참고해 `CreatorChannelEvent` 소비형 이벤트로 변경하고, `chatRoomIdLiveData` 테스트에서 첫 번째 `consume()`은 `chatRoomId`, 두 번째 `consume()`은 `null`임을 검증하도록 보강했다. +- 2026-06-13: 소비형 이벤트 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeViewModelTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 재실행해 모두 `BUILD SUCCESSFUL`을 확인했다. +- 2026-06-13: 추가 코드리뷰에서 팔로우/채팅방 생성 액션 실패도 `showUnknownError()`를 통해 홈 상태를 `Error`로 덮어 기존 Content가 사라질 수 있다는 P1 지적을 받았다. `팔로우 실패는 현재 content를 유지하고 unknown toast만 emit한다`, `채팅방 생성 실패는 현재 content를 유지하고 unknown toast만 emit한다` 테스트를 먼저 추가했고, 기존 구현에서 `ClassCastException`으로 실패하는 RED를 확인했다. +- 2026-06-13: 홈 로드 실패는 기존처럼 `CreatorChannelHomeUiState.Error`를 유지하되, 팔로우/채팅방 생성 액션 실패는 `showUnknownErrorToast()`만 호출하도록 분리했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeViewModelTest"`를 실행해 `BUILD SUCCESSFUL`을 확인했다.