From ecc59376a37770abff36a8fb04f8eea3e5001707 Mon Sep 17 00:00:00 2001 From: klaus Date: Sat, 6 Jun 2026 00:08:54 +0900 Subject: [PATCH] =?UTF-8?q?docs(home):=20=EC=B5=9C=EA=B7=BC=20=ED=99=9C?= =?UTF-8?q?=EB=8F=99=20=EC=9D=B4=EB=8F=99=20=EA=B2=80=EC=A6=9D=EC=9D=84=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plan-task.md | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md b/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md index e382dfd3..6bb5ca97 100644 --- a/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md +++ b/docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md @@ -523,16 +523,33 @@ --- -### Phase 11: 최종 검증과 문서 기록 +### Phase 11: 방금 활동한 크리에이터 터치 액션 연결 -- [ ] **Task 11.1: 단위 테스트와 빌드 검증** +- [x] **Task 11.1: 방금 활동한 크리에이터 클릭 라우팅 구현** + - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/HomeMainFragment.kt` + - 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationUiModels.kt` + - 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt` + - 구현 내용: + - `Live`는 터치 액션 없음. + - `LiveReplay`, `Audio`는 `AudioContentDetailActivity`로 이동하고 `Constants.EXTRA_AUDIO_CONTENT_ID`에 `targetId`를 전달한다. + - `Community`는 `CreatorCommunityAllActivity`로 이동하고 `Constants.EXTRA_COMMUNITY_CREATOR_ID`에 `targetId`를 전달한다. + - `activityType`이 unknown이거나 `targetId`가 없거나 0 이하이면 이동하지 않는다. + - 검증: + - `HomeMainFragmentLayoutTest`에 activity type별 route와 Intent extra 계약 회귀 테스트를 추가한다. + - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route maps activity type to target destination" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route ignores live unknown and missing target" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route creates expected intents"`로 RED/GREEN을 확인한다. + +--- + +### Phase 12: 최종 검증과 문서 기록 + +- [ ] **Task 12.1: 단위 테스트와 빌드 검증** - 실행: `./gradlew :app:testDebugUnitTest` - 실행: `./gradlew :app:compileDebugKotlin` - 실행: `./gradlew :app:mergeDebugResources` - 실행: `./gradlew :app:ktlintCheck` - 기대 결과: 모두 성공. -- [ ] **Task 11.2: 수동 확인** +- [ ] **Task 12.2: 수동 확인** - 확인 항목: - 추천 tab 선택 상태 - tab 전환은 글자 터치로만 동작하고 swipe 전환은 없음 @@ -542,13 +559,14 @@ - 빈 리스트 섹션 숨김 - 첫 오디오 태그 조건 - activity type 다국어 문자열 + - 방금 활동한 크리에이터 목적지별 클릭 이동 - 모두 팔로우 success 후 완료 상태 - 배너 목적지별 클릭 이동 - 인기 커뮤니티 유료/무료/구매 완료 이미지 상태 - 사업자 정보 더보기/접기 - 기대 결과: PRD Metrics 항목 충족. -- [ ] **Task 11.3: 검증 기록 누적** +- [ ] **Task 12.3: 검증 기록 누적** - 수정: `docs/20260601_메인_홈_추천_UI와_API_연동/plan-task.md` - 수정: `docs/20260601_메인_홈_추천_UI와_API_연동/prd.md` - 구현 내용: 실행 명령, 결과, 실패 시 원인과 후속 조치를 문서 하단 `검증 기록`에 누적한다. @@ -565,6 +583,8 @@ --- ## 검증 기록 +- 2026-06-06: 사용자 요청에 따라 `Phase 11: 방금 활동한 크리에이터 터치 액션 연결`을 추가하고 기존 `Phase 11: 최종 검증과 문서 기록`을 `Phase 12`로 뒤로 밀었다. 구현으로 최근 활동 카드 클릭 시 `Live`는 no-op, `LiveReplay`/`Audio`는 `AudioContentDetailActivity` + `Constants.EXTRA_AUDIO_CONTENT_ID = targetId`, `Community`는 `CreatorCommunityAllActivity` + `Constants.EXTRA_COMMUNITY_CREATOR_ID = targetId`로 이동하도록 연결했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route maps activity type to target destination" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route ignores live unknown and missing target" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recent activity route creates expected intents"`에서 `HomeRecommendationRecentlyActiveCreatorRoute`, `toHomeRecommendationRecentlyActiveCreatorRoute()`, `toHomeRecommendationRecentlyActiveCreatorIntent()` 미정의 컴파일 실패로 확인했다. 구현 후 동일 명령은 BUILD SUCCESSFUL을 확인했다. +- 2026-06-06: Task 11.1 회귀 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` 속성 deprecation warning만 출력되었고 신규 실패는 없었다. 변경 파일 4개로 리뷰 게이트를 수행했고, `Live` no-op, `LiveReplay`/`Audio`/`Community` 목적지 및 extra 계약, invalid target no-op, Fragment callback 연결, Phase 11/12 문서 이동, 테스트 커버리지에 대해 blocking finding 없음으로 승인받았다. - 2026-06-05: Task 10.1 구현으로 홈 추천 배너 클릭 라우팅을 연결했다. `eventItem`은 `EventDetailActivity` + `Constants.EXTRA_EVENT`, `creatorId`는 `UserProfileActivity` + `Constants.EXTRA_USER_ID`, `seriesId`는 `SeriesDetailActivity` + `Constants.EXTRA_SERIES_ID`, `link`는 `Intent.ACTION_VIEW`로 실행한다. 여러 대상이 함께 내려오면 `eventItem` → `creatorId` → `seriesId` → `link` 순서로 우선 처리한다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route uses event creator series link priority"`에서 `HomeRecommendationBannerRoute`, `toHomeRecommendationBannerRoute()` 미정의 컴파일 실패로 확인했다. 구현 후 동일 테스트는 최초 `:app:kspDebugKotlin`의 `java.io.EOFException`으로 중단되었고, `--rerun-tasks` 재실행에서 BUILD SUCCESSFUL을 확인했다. 이후 내부 딥링크 판별 누락 지적에 따라 `BuildConfig.APPSCHEME` custom scheme과 `https://${BuildConfig.APPSCHEME}.onelink.me` app link만 내부 딥링크로 인정하고, `mailto:` 같은 외부 custom scheme은 이동하지 않도록 보강했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route maps creator series web and internal deeplink" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route ignores blank malformed and scheme-less links"`에서 2개 테스트 실패로 확인했고, 수정 후 동일 명령은 BUILD SUCCESSFUL을 확인했다. - 2026-06-05: Task 10.1 최종 회귀 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 실행했고 모두 BUILD SUCCESSFUL을 확인했다. `ktlintCheck`에서는 기존 `.editorconfig`의 `disabled_rules` 속성 deprecation warning만 출력되었고 신규 실패는 없었다. - 2026-06-05: Task 10.1 리뷰 반려 대응으로 라우팅 결정 테스트에 더해 실제 `Intent` 생성 계약 테스트를 추가했다. `HomeRecommendationBannerRoute.toHomeRecommendationBannerIntent(context)`를 추가해 `EventDetailActivity`/`UserProfileActivity`/`SeriesDetailActivity` component와 `Constants.EXTRA_EVENT`/`Constants.EXTRA_USER_ID`/`Constants.EXTRA_SERIES_ID` extra, `Intent.ACTION_VIEW` link data를 검증하도록 했다. 또한 `creatorId + seriesId + link`, `seriesId + link` 조합 우선순위 테스트를 추가했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route creates activity and link intents with expected extras"`에서 `toHomeRecommendationBannerIntent()` 미정의 컴파일 실패로 확인했고, 구현 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route creates activity and link intents with expected extras" --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home banner route uses creator over series and series over link priority"`는 BUILD SUCCESSFUL을 확인했다. 이후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`를 재실행했고 모두 BUILD SUCCESSFUL을 확인했다.