From 848cd030685551ffaa7fef1a0264c145cb0dbccf Mon Sep 17 00:00:00 2001 From: klaus Date: Sun, 12 Jul 2026 05:29:44 +0900 Subject: [PATCH] =?UTF-8?q?docs(home):=20=EC=9E=A5=EB=A5=B4=20=ED=81=AC?= =?UTF-8?q?=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0=20=EB=AF=B8=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=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 --- .../plan-task.md | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md b/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md index 4543fa5c..dfb52d00 100644 --- a/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md +++ b/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md @@ -215,16 +215,17 @@ - 검증: 샘플 audio/AI character 데이터로 실제 기기에서 카드 배치와 이미지/텍스트 영역이 보인다. 오디오 태그 조합이 PRD 조건과 일치. - [x] **Task 6.4: 장르별/응원 크리에이터와 모두 팔로우 버튼 구현** + - 현재 정책: 2026-07-12 Phase 14 이후 `genreCreators` UI와 모두 팔로우 버튼은 추천 탭에 표시하지 않으며, 아래 장르 관련 구현 내용은 과거 이력으로만 유지한다. - 생성 후보: `app/src/main/res/layout/item_home_creator_profile.xml` - 생성 후보: `app/src/main/res/layout/view_home_follow_all_button.xml` - 생성 후보: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeGenreCreatorAdapter.kt` - 생성 후보: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeCheerCreatorAdapter.kt` - 구현 내용: - `cheerCreators.creatorId` 목록으로 모두 팔로우 API 호출 - - `genreCreators`의 해당 그룹 `creators.creatorId` 목록으로 모두 팔로우 API 호출 + - 현재 미사용: `genreCreators`는 추천 탭 UI에 표시하지 않으므로 해당 그룹 `creators.creatorId` 목록으로 모두 팔로우 API를 호출하지 않는다. - success 후 `모두 팔로우 완료`, `ic_new_following`, click disabled - 실패 시 toast/error 표시 - - 검증: 샘플 genre/cheer creator 데이터로 실제 기기에서 profile grid와 모두 팔로우 버튼 배치가 보인다. 빈 creator list에서는 API 호출하지 않고 버튼 상태 유지. + - 검증: 현재 정책에서는 `genreCreators` UI 미표시를 검증하고, `cheerCreators` profile grid와 모두 팔로우 버튼 배치는 기존 정책대로 유지한다. 빈 creator list에서는 API 호출하지 않고 버튼 상태 유지. - [x] **Task 6.5: 방금 활동한 크리에이터 Figma 정합 수정** - 기준: Figma `24:5529` @@ -325,6 +326,7 @@ - 검증: `HomeMainFragmentLayoutTest`에 모두 팔로우 기본/완료 상태와 완료 상태 no-op 회귀 테스트를 추가한다. - [x] **Task 6.12: 장르의 크리에이터 Figma 정합 추가 수정** + - 현재 정책: 2026-07-12 Phase 14 이후 `genreCreators` 그룹 page/snapping UI는 추천 탭에 표시하지 않으며, 아래 표시 요구는 과거 구현 이력으로만 유지한다. - 기준: Figma `24:5611` - 수정: `app/src/main/res/layout/fragment_v2_main_home.xml` - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/HomeMainFragment.kt` @@ -333,12 +335,12 @@ - 생성 후보: `app/src/main/res/layout/item_home_genre_creator_profile.xml` - 생성 후보: `app/src/main/res/drawable/bg_home_genre_creator_group.xml` - 구현 내용: - - `genreCreators: List`를 그룹 단위 page로 표시한다. - - 각 장르 page는 `374dp` 폭, `14dp` padding/radius/gap, dark-blue gradient 배경을 적용한다. - - 각 page 내부에 장르 제목, 8명 creator profile grid, 모두 팔로우 버튼을 포함한다. - - 전체 장르 page 목록은 free scroll이 아니라 `PagerSnapHelper` 기반 banner snapping으로 이동한다. - - 빈 creator group은 숨기고 최대 5개 장르 group만 표시한다. - - 검증: `HomeMainFragmentLayoutTest`에 genre page 치수/gradient/grid/snap/helper/filtering 회귀 테스트를 추가한다. + - 현재 미사용: `genreCreators: List`를 그룹 단위 page로 표시하지 않는다. + - 현재 미사용: 장르 page 치수/배경 요구는 추천 탭 UI에 적용하지 않는다. + - 현재 미사용: 장르 제목, creator profile grid, 모두 팔로우 버튼을 포함한 page를 표시하지 않는다. + - 현재 미사용: 장르 page 목록 snapping을 제공하지 않는다. + - 현재 미사용: 장르 group 표시/최대 개수 정책은 추천 탭 UI에 적용하지 않는다. + - 검증: 현재 정책에서는 `HomeMainFragmentLayoutTest`에서 `genreCreators` 섹션 기본 숨김, 바인딩 시 `GONE`, hidden section 제외 empty 판정을 검증한다. - [x] **Task 6.13: 최근 응원이 많은 크리에이터 Figma 정합 추가 수정** - 기준: Figma `24:5636` @@ -675,6 +677,7 @@ - 2026-06-02: `AudioContentCardView`와 `item_home_first_audio_content.xml`의 badge별 제어를 위해 `Original`/`First`/`Point`/`Free` badge에 안정적인 id를 추가했다. `AudioContentCardView`의 runtime 생성 badge에도 동일 id를 부여하고, `First`와 `Free` badge 높이를 `24dp`로 유지하도록 맞췄다. `HomeMainFragmentLayoutTest`에서 badge id/높이 계약을 검증하도록 보강했으며 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 실행해 모두 BUILD SUCCESSFUL을 확인했다. - 2026-06-02: Figma `24:5551` 기준 `크리에이터와 이야기를 나눠요!` 섹션을 확인해 기존 목록 padding `20dp`, adapter item gap `12dp`, generic `RecyclerView.LayoutParams(WRAP_CONTENT, WRAP_CONTENT)` 적용이 `view_character_chat_thumbnail.xml`의 root `185dp x wrap_content` 계약을 보존하지 못함을 확인했다. `HomeMainFragmentLayoutTest`에 character thumbnail root 치수, AI 캐릭터 목록 spacing, adapter item dimension 회귀 테스트를 먼저 추가했고, 수정 전 targeted test에서 새 테스트 2건 실패로 RED를 확인했다. - 2026-06-02: `rv_home_ai_characters` padding을 `14dp`로 맞추고, `HomeAiCharacterAdapter`에서 inflate된 `view_character_chat_thumbnail.xml` root layout params를 유지한 채 `marginEnd`만 `4dp`로 적용했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `lsp_diagnostics`는 Kotlin/XML LSP 미구성으로 실행하지 못해 Gradle compile/test/ktlint로 보완했다. +- 2026-07-12 현재 정책: 아래 2026-06-04 장르 크리에이터 UI/모두 팔로우/grid/snapping 관련 검증 기록은 과거 구현 이력으로만 유지한다. Phase 14 이후 `genreCreators` 섹션은 추천 탭에 표시하지 않고, follow-all API 호출과 완료 상태 갱신도 사용하지 않는다. - 2026-06-04: Figma `24:5611`, 완료 버튼 `24:9092` 기준 장르 크리에이터 모두 팔로우 버튼을 확인해 기본 상태는 `ic_new_follow`, 투명 배경과 흰색 30% stroke, 흰색 텍스트이고 완료 상태는 `ic_new_following`, 흰색 배경, 검은색 텍스트여야 함을 확인했다. `HomeMainFragmentLayoutTest`에 모두 팔로우 기본/완료 상태와 완료 상태 no-op 회귀 테스트를 먼저 추가했고, 구현 전 `bg_home_follow_all_button` 리소스 미존재로 RED 컴파일 실패를 확인했다. - 2026-06-04: `bg_home_follow_all_button.xml`을 추가하고 `view_home_follow_all_button.xml`의 기본 상태를 Figma 활성 상태로 변경했다. `HomeFollowAllButtonBinder`는 완료 상태에서 `bg_round_corner_999_white`, 검은 텍스트, `ic_new_following`, `모두 팔로우 완료`를 적용하고 터치 시 callback을 호출하지 않도록 수정했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `./gradlew :app:installDebug`는 연결된 기기가 없어 `No connected devices!`로 실패해 실기기 설치 확인은 수행하지 못했다. - 2026-06-04: 사용자 추가 요청에 따라 Figma `24:5611` 기준 `장르의 크리에이터` 섹션을 그룹 단위 snapping card 구조로 수정했다. 구현 전 `HomeMainFragmentLayoutTest`에 genre group card/profile/snapping/filtering/follow callback 회귀 테스트를 추가했고, 기존 구현에서 `item_home_genre_creator_group`, `bg_home_genre_creator_group`, `submitGroups` 등 새 계약 미존재로 RED 컴파일 실패를 확인했다. 이후 `HomeGenreCreatorAdapter`를 group page adapter로 변경하고, `HomePagerSnapRecyclerView`, `item_home_genre_creator_group.xml`, `item_home_genre_creator_profile.xml`, `bg_home_genre_creator_group.xml`을 추가해 각 page에 장르 제목, 8명 grid, 모두 팔로우 버튼, dark-blue gradient, `PagerSnapHelper` snapping을 적용했다. targeted 테스트 최초 재실행에서는 null image가 Coil `ImageLoaderProvider`를 요구해 실패했고, nullable image는 drawable을 명시적으로 비우도록 수정한 뒤 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`가 BUILD SUCCESSFUL임을 확인했다. 추가 검증으로 `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `./gradlew :app:testDebugUnitTest`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. ktlint 최초 실행은 테스트 파일 긴 줄 2곳으로 실패했고 줄바꿈 수정 후 재실행으로 성공했다. `lsp_diagnostics`는 Kotlin/XML LSP 미구성으로 실행하지 못해 Gradle compile/test/ktlint로 보완했다. 실기기 수동 확인은 연결 기기가 없어 수행하지 못했다. @@ -762,7 +765,21 @@ - 2026-07-10: `HomeMainFragmentLoginGuardSourceTest`에 인기 커뮤니티가 `CreatorChannelCommunityDetailActivity.newIntent(requireContext(), postId)`를 사용하고 기존 `CreatorCommunityAllActivity`/커뮤니티 목록 extra를 쓰지 않는 source 검증을 추가했다. 기존 구현에서 RED 실패를 확인한 뒤 `HomeMainFragment.openPopularCommunityPost()`가 `postId`만 검증하고 상세 Activity를 열도록 수정했다. - 2026-07-10: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route creates expected intents" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"` 실행 결과 BUILD SUCCESSFUL을 확인했다. +### Phase 14: `genreCreators` UI 미표시 + +- [x] **Task 14.1: 추천 탭 장르별 크리에이터 섹션 숨김** + - 수정: `app/src/main/res/layout/fragment_v2_main_home.xml` + - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt` + - 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt` + - 구현 내용: + - `ll_home_genre_creator_section`의 기본 visibility를 `gone`으로 둔다. + - `bindGenreCreatorSection()`은 API 응답 데이터와 무관하게 섹션을 `GONE`으로 유지하고 adapter에는 빈 그룹을 제출한다. + - `genreCreators` DTO/API/UI model/mapper 계약은 유지하고, `cheerCreators` 섹션은 변경하지 않는다. + - 검증 기록: + - 2026-07-12: `HomeMainFragmentLayoutTest`에 `home recommendation does not display genre creator section`을 먼저 추가해 기존 구현에서 `HomeMainFragmentLayoutTest.kt:152` assertion 실패로 RED를 확인했다. 이후 XML 기본 숨김과 Fragment 바인딩의 `View.GONE`/`emptyList()` 제출을 적용했고 동일 테스트가 BUILD SUCCESSFUL로 GREEN 전환됨을 확인했다. + ## Verification Log +- 2026-07-12: `genreCreators` UI 미표시 변경 검증으로 targeted RED/GREEN 테스트를 수행했다. 리뷰에서 PRD 앞부분의 장르별 크리에이터 표시/모두 팔로우 문구와 `HomeRecommendationUiState.Content.isEmpty`의 `genreCreators.groups` 포함이 차단 이슈로 확인되어, PRD 문구를 미표시 정책으로 정리하고 `isEmpty`는 실제 표시 섹션만 기준으로 판단하도록 수정했다. `home recommendation empty state ignores hidden genre creators` 테스트는 수정 전 `HomeMainFragmentLayoutTest.kt:180` assertion 실패로 RED를 확인했고, 수정 후 GREEN 전환을 확인했다. 추가 재검토에서 plan-task 과거 Task 6.4/6.12와 코드/테스트에 남은 `genreCreators` follow-all 및 pager UI 활성 계약이 차단 이슈로 확인되어, 과거 Task 문구는 현재 미사용 정책으로 정리하고 `HomeMainFragment`의 genre follow-all 연결, `HomeRecommendationViewModel`의 genre follow 완료 상태 갱신, 활성 UI/follow-all 테스트 계약을 제거했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest" :app:mergeDebugResources :app:compileDebugKotlin :app:ktlintCheck`를 실행해 BUILD SUCCESSFUL을 확인했다. `ktlintCheck` 최초 재실행은 테스트 파일 불필요한 빈 줄로 실패했고 해당 줄만 제거한 뒤 재실행해 성공했다. `git diff --check` 출력 없음도 확인했다. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐고 lint 실패는 없었다. `adb devices` 결과 연결된 기기/에뮬레이터가 없어 실기기 수동 확인은 수행하지 못했다. - 2026-07-10: Phase 13 코드 리뷰 및 검증을 재수행했다. 리뷰 범위는 최근 활동 COMMUNITY route가 `targetId`를 `postId`로 해석해 `CreatorChannelCommunityDetailActivity.newIntent(context, postId)`를 생성하는지, 인기 커뮤니티 item이 `FeedItem.Community.postId` 기반으로 상세 Activity를 여는지, 기존 `CreatorCommunityAllActivity`/커뮤니티 목록 extra 제거 여부, 로그인 가드 전 invalid return 유지 여부다. 코드 리뷰 결과 blocking finding은 없었다. 검증으로 Phase 13 targeted test, `HomeMainFragmentLayoutTest` 전체, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --cached --check`가 모두 통과했고, `rg`로 v2 home production 코드에 기존 커뮤니티 목록 라우팅 참조가 남지 않았음을 확인했다. - 2026-07-10: 커뮤니티 상세 라우팅 변경 회귀 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLoginGuardSourceTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`를 실행했고 모두 통과했다. `ktlintCheck` 최초 실행은 이번에 수정한 source test 파일의 기존 긴 assertion 줄 때문에 실패했으며, 동작 변경 없이 줄바꿈과 긴 문자열 분리만 적용한 뒤 재실행해 BUILD SUCCESSFUL을 확인했다. `rg`로 v2 home production 코드에 `CreatorCommunityAllActivity`와 기존 커뮤니티 전체목록 extra 참조가 남지 않았고, 해당 문자열은 금지 조건 source test에만 남아 있음을 확인했다. - 2026-06-29: `처음부터 함께 성장!` 제거 회귀 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*" --tests "kr.co.vividnext.sodalive.v2.main.content.overview.*" :app:mergeDebugResources :app:compileDebugKotlin :app:ktlintCheck`를 실행했고 BUILD SUCCESSFUL을 확인했다. `git diff --check` 출력 없음도 확인했다. Android 기기/에뮬레이터 접근이 없어 실제 화면 조작은 수행하지 못했으며, `rg`로 `app/src/main`의 first audio/FIRST_AUDIO_CONTENT production 참조 제거를 확인했다. 리뷰 게이트에서 차단 이슈 없이 승인받았다.