docs(home): 프로필과 상대 시간 검증을 기록한다

This commit is contained in:
2026-06-05 22:01:23 +09:00
parent 58e69be510
commit cdcd938cdf

View File

@@ -483,6 +483,24 @@
- `BannerViewTest`에 carousel 설정 시 max range insert/change notify를 호출하지 않는 회귀 테스트와 단일 배너 specific notify 회귀 테스트를 추가한다. - `BannerViewTest`에 carousel 설정 시 max range insert/change notify를 호출하지 않는 회귀 테스트와 단일 배너 specific notify 회귀 테스트를 추가한다.
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.banner.BannerViewTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`로 회귀를 확인한다. - `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.banner.BannerViewTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`로 회귀를 확인한다.
- [x] **Task 9.6: 홈 추천 프로필 이미지 원형 처리와 상대 시간 표시 적용**
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/GetCommunityPostListResponse.kt`
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/model/HomeRecommendationMappers.kt`
- 수정: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeRecentActivityCreatorAdapter.kt`
- 수정: `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`
- 수정: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragmentLayoutTest.kt`
- 구현 내용:
- 기존 `GetCommunityPostListResponse.relativeTimeText(context)`가 사용하는 UTC 서버 시간 파싱과 상대 시간 문자열 계산을 DTO 전용 확장 함수에서 재사용 가능한 일반 함수 또는 공통 확장 함수로 분리한다.
- `HomeActiveCreatorItem.activityAt`은 UTC 값을 디바이스 기본 타임존 기준으로 해석한 뒤 time-ago timestamp 문자열로 변환해 `HomeRecommendationRecentlyActiveCreatorUiModel.activityAt`에 매핑한다.
- `HomePopularCommunityPostItem.createdAt`도 같은 상대 시간 변환 함수를 사용해 `FeedItem.Community.createdAtText`에 매핑한다.
- `방금 활동한 크리에이터`, `[장르] 크리에이터`, `최근 응원이 많은 크리에이터`의 creator profile image는 기존 Coil image loading 패턴에 `CircleCropTransformation` 또는 동일한 원형 clipping 방식을 적용한다.
- 상대 시간 변환 실패 시 크래시 없이 기존 커뮤니티 포스트 정책과 동일하게 `character_comment_time_just_now` 문자열을 표시한다.
- 검증:
- `HomeMainFragmentLayoutTest`에 최근 활동 `activityAt`과 인기 커뮤니티 `createdAt`이 UTC 입력에서 상대 시간 문자열로 매핑되는 회귀 테스트를 추가한다.
- `HomeMainFragmentLayoutTest`에 최근 활동/장르/응원 creator profile image가 원형 처리 계약을 적용하는 회귀 테스트를 추가한다.
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`로 회귀를 확인한다.
--- ---
### Phase 10: 최종 검증과 문서 기록 ### Phase 10: 최종 검증과 문서 기록
@@ -526,6 +544,9 @@
--- ---
## 검증 기록 ## 검증 기록
- 2026-06-05: 사용자 요청에 따라 Phase 9에 `Task 9.6: 홈 추천 프로필 이미지 원형 처리와 상대 시간 표시 적용`을 추가했다. 기존 `GetCommunityPostListResponse.relativeTimeText(context)``dateUtc`를 UTC로 파싱해 디바이스 타임존 기준 상대 시간 문자열을 만들고, 홈 추천 mapper가 현재 `activityAt`/`createdAt` 원문을 그대로 전달하는 것을 확인해 공통 상대 시간 함수 분리와 최근 활동/인기 커뮤니티 재사용 항목으로 기록했다. 문서 변경만 수행했으므로 Gradle 검증은 실행하지 않고 문서 재읽기로 확인한다.
- 2026-06-05: Task 9.6 구현으로 `RelativeTimeFormatter`를 추가해 UTC timestamp를 디바이스 기본 타임존 기준 상대 시간 문자열로 변환하고, 홈 추천 응답 매핑에서 `HomeActiveCreatorItem.activityAt``HomePopularCommunityPostItem.createdAt`에 적용했다. 최근 활동/장르/응원 creator profile image는 `CircleCropTransformation` 기반 공통 helper로 원형 로딩하도록 변경했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`에서 `homeCreatorProfileImageTransformations`, `toUiModel(context)` 미정의 컴파일 실패로 확인했고, 구현 후 동일 targeted test와 `./gradlew :app:compileDebugKotlin`은 BUILD SUCCESSFUL을 확인했다. `./gradlew :app:ktlintCheck`는 최종 diff에 없는 기존 `GetCommunityPostListResponse.kt``creator_community` package-name 위반으로 실패해 별도 기존 이슈로 분리했다.
- 2026-06-05: Task 9.6 후속 수정으로 `HomeRecommendationViewModel``Context`를 주입해 보관하던 구조를 제거했다. `HomeRecommendationViewModel`은 다시 `HomeRecommendationViewModel(get())`로 Repository만 주입받고, UTC 상대 시간 문자열 변환은 `HomeMainFragment`의 UI 바인딩 경계에서 `requireContext()`로 처리하도록 이동했다. RED 검증은 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest.home recommendation viewmodel does not keep android context"`에서 ViewModel source에 `android.content.Context`가 남아 실패하는 것으로 확인했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`가 모두 BUILD SUCCESSFUL임을 확인했다.
- 2026-06-02: `docs/20260601_메인_홈_추천_UI와_API_연동/prd.md`, `docs/agent-guides/work-plan-docs.md`를 확인해 계획 문서 위치와 phase/task 형식을 맞췄다. - 2026-06-02: `docs/20260601_메인_홈_추천_UI와_API_연동/prd.md`, `docs/agent-guides/work-plan-docs.md`를 확인해 계획 문서 위치와 phase/task 형식을 맞췄다.
- 2026-06-02: `HomeMainFragment`, `fragment_v2_main_home.xml`, `HomeApi`, `HomeRepository`, `AppDI`, `ApiResponse`, 주요 v2 widget 파일을 확인해 신규 API/Repository/ViewModel과 UI 작업 범위를 계획에 반영했다. - 2026-06-02: `HomeMainFragment`, `fragment_v2_main_home.xml`, `HomeApi`, `HomeRepository`, `AppDI`, `ApiResponse`, 주요 v2 widget 파일을 확인해 신규 API/Repository/ViewModel과 UI 작업 범위를 계획에 반영했다.
- 2026-06-02: 사용자 추가 제공 정보에 따라 `ViewPager2`/swipe 전환과 tab별 Fragment 선행 생성을 제외하고, `TextTabBarView` 아래 추천 content만 세로 스크롤되도록 Phase 5와 수동 확인 항목을 갱신했다. - 2026-06-02: 사용자 추가 제공 정보에 따라 `ViewPager2`/swipe 전환과 tab별 Fragment 선행 생성을 제외하고, `TextTabBarView` 아래 추천 content만 세로 스크롤되도록 Phase 5와 수동 확인 항목을 갱신했다.