26 KiB
26 KiB
PRD: 크리에이터 랭킹 페이지
1. Overview
HomeMainFragment의 Text Tab bar에서 랭킹을 선택했을 때 GET /api/v2/home/rankings/creators 응답을 기존 kr.co.vividnext.sodalive.v2.widget.creatorranking 위젯으로 표시하는 홈 랭킹 페이지를 구현한다.
2. Problem
- 홈 추천 화면에는
추천,랭킹,팔로잉Text Tab bar가 이미 배치되어 있지만,랭킹선택 시 표시할 실제 페이지가 없다. - Figma
24:5654에는 홈 랭킹 화면과 크리에이터 랭킹 목록이 정의되어 있으나, 3번째 줄의 Capsule Tab bar는 이번 요구사항에서 제외해야 한다. - 기존 크리에이터 랭킹 위젯은
previousRank,rankChangeType,rankChangeAmount,creatorName,imageUrl,isBlocked계약을 사용한다. - 신규 API 응답은
showRankChange,items[].rankChange,items[].isNew,items[].nickname,items[].profileImageUrl형태이므로 기존 위젯 계약으로 변환하는 mapper가 필요하다.
3. Goals
HomeMainFragment에서 Text Tab bar의랭킹선택 시 크리에이터 랭킹 페이지를 표시한다.- API
GET /api/v2/home/rankings/creators를 호출해 응답 item을 기존CreatorRankingAdapter/CreatorRankingItem기반 UI로 표시한다. - Figma
24:5654기준 상단 TitleBar와 Text Tab bar 아래에 랭킹 목록을 배치한다. - Figma에 존재하더라도 3번째 줄 Capsule Tab bar(
주간 인기,지금 뜨는 중,남성 인기,여성 인기)는 배치하지 않는다. - 기존
kr.co.vividnext.sodalive.v2.widget.creatorranking위젯을 우선 재사용하고, API 응답과 Figma 정합에 필요한 최소 변경만 수행한다. - 랭킹 item 터치 시 접근 가능한 크리에이터의 프로필 화면으로 이동할 수 있도록 한다.
4. Non-Goals
- Capsule Tab bar 및 기간/성별/인기 유형 필터는 구현하지 않는다.
팔로잉탭 페이지는 구현하지 않는다.- 크리에이터 랭킹 위젯의 순위별 카드 variant 정책 자체를 새로 설계하지 않는다.
- Figma에 없는 skeleton, shimmer, pagination, pull-to-refresh, 추가 배너, 광고 영역은 구현하지 않는다.
- 서버 API 스키마를 클라이언트에서 임의로 변경하지 않는다.
- ViewPager2 기반 tab swipe 전환, tab별 신규 Fragment 대량 분리는 이번 범위에 포함하지 않는다.
5. Target Users
- 홈에서 인기 크리에이터 순위를 확인하려는 앱 사용자.
HomeMainFragment와 v2 위젯 기반 홈 화면을 유지보수하는 Android 개발자.
6. User Stories
- 사용자는 홈의
랭킹탭을 눌러 크리에이터 순위를 바로 보고 싶다. - 사용자는 1위, 2~10위, 11위 이후 순위가 시각적으로 구분된 카드로 표시되길 기대한다.
- 사용자는 신규 진입 또는 순위 변동 정보를 랭킹 카드에서 확인하고 싶다.
- 사용자는 랭킹 item을 눌러 해당 크리에이터 프로필로 이동하고 싶다.
- 개발자는 API 응답을 기존 랭킹 위젯 계약으로 명확히 변환해 재사용하고 싶다.
7. Core Features
Home Ranking Tab Page
HomeMainFragment의 Text Tab bar에서 랭킹 선택 상태일 때 크리에이터 랭킹 목록을 표시한다.
Requirements
- Text Tab bar 항목은 기존과 동일하게
추천,랭킹,팔로잉순서를 유지한다. 랭킹선택 시 Text Tab bar selected index가랭킹으로 갱신되어야 한다.- TitleBar와 Text Tab bar는 기존 홈 추천 화면과 동일하게 상단에 유지한다.
- Text Tab bar 아래 content 영역만 랭킹 페이지 content로 교체한다.
- 랭킹 페이지 content는 세로 스크롤 가능한 목록으로 구성한다.
- Figma
24:5654의 3번째 줄 Capsule Tab bar는 배치하지 않으므로, 랭킹 목록은 Text Tab bar 아래에서 바로 시작한다. - 추천 탭으로 다시 전환하면 기존 추천 페이지 content가 표시되어야 한다.
Edge Cases
- API loading 중에는 기존 홈 추천 API loading 처리와 일관된 정책을 따른다.
- API error 또는 empty 응답이면 랭킹 목록 영역을 비우거나 기존 홈 empty/error 정책에 맞춰 처리한다.
items가 빈 배열이면CreatorRankingAdapter에는 빈 목록을 전달하고, 불필요한 placeholder UI는 추가하지 않는다.
Creator Ranking API Integration
홈 랭킹 페이지에서 GET /api/v2/home/rankings/creators를 호출하고 응답을 UI model로 변환한다.
API Endpoint
GET /api/v2/home/rankings/creators
Response Contract
{
"showRankChange": true,
"items": [
{
"rank": 1,
"rankChange": 5,
"isNew": false,
"creatorId": 123,
"nickname": "creator",
"profileImageUrl": "https://cdn.example.com/profile.png"
}
]
}
Mapping Requirements
| Response field | UI/widget field | Requirement |
|---|---|---|
items[].creatorId |
CreatorRankingItem.creatorId |
그대로 전달한다. |
items[].rank |
CreatorRankingItem.rank |
1 이상인 item만 표시한다. |
items[].nickname |
CreatorRankingItem.creatorName |
그대로 전달한다. |
items[].profileImageUrl |
CreatorRankingItem.imageUrl |
그대로 전달한다. |
items[].isNew |
CreatorRankingItem.rankChangeType |
true이면 RankingChangeType.New로 매핑한다. |
items[].rankChange |
CreatorRankingItem.rankChangeType, CreatorRankingItem.rankChangeAmount |
null 또는 0이면 Stay, 양수이면 Increase, 음수이면 Decrease로 매핑하고 표시 숫자는 절대값을 사용한다. |
showRankChange |
순위 변동 표시 여부 | false이면 모든 item의 rank-num 영역을 완전히 숨긴다. |
Rank Change Rules
isNew=true이면rankChange값과 무관하게RankingChangeType.New로 표시한다.isNew=false && (rankChange=null || rankChange=0)이면RankingChangeType.Stay로 표시한다.isNew=false && rankChange > 0이면RankingChangeType.Increase로 표시한다.isNew=false && rankChange < 0이면RankingChangeType.Decrease로 표시한다.Increase와Decrease의 표시 숫자는abs(rankChange)를 사용한다.showRankChange=false이면isNew,rankChange값과 무관하게 rank-num 영역을 완전히 숨긴다.- API 응답 item은 서버에서 항상
rank오름차순으로 내려오지만, 클라이언트에서도 한 번 더rank기준 오름차순 정렬 후 표시한다.
Click Requirements
creatorId > 0인 item만 클릭 이벤트가 동작한다.creatorId > 0인 item을 터치하면UserProfileActivity로 이동하고Constants.EXTRA_USER_ID에creatorId를 전달한다.creatorId = 0인 item은 차단 관계인 크리에이터로 간주하며 클릭 이벤트가 동작하지 않는다.- 랭킹 item 터치 시 크리에이터 프로필 이동 외 별도 analytics/logging은 추가하지 않는다.
Creator Ranking Widget Reuse
기존 kr.co.vividnext.sodalive.v2.widget.creatorranking 컴포넌트를 랭킹 페이지 목록에 사용한다.
Existing Widget Fit
- Figma
24:5654의 카드 구조는 기존 크리에이터 랭킹 위젯 PRD의 순위 구간과 일치한다.- 1위:
Large - 2위~7위: 2열
Compact - 8위~10위: 3열
Compact - 11위 이후:
Horizontal
- 1위:
- 이미지 radius, dim gradient, Pattaya 순위 숫자, rank-num, New badge는 기존 위젯 계약을 따른다.
- API 응답에서 차단 관계인 크리에이터는
creatorId=0으로 내려오므로creatorId=0item은isBlocked=true,creatorId>0item은isBlocked=false로 매핑한다.
Required Change Candidates
showRankChange=false일 때 rank-num 영역을 완전히 숨기는 옵션이 기존 위젯에 없으면 최소 확장이 필요하다.- 기존
CreatorRankingItem.rankChangeAmount는 non-nullInt이므로rankChange=null응답을Stay와0으로 안전하게 변환해야 한다. - 기존 위젯은
creatorName/imageUrl이름을 사용하므로 API DTO와 UI model mapper를 분리한다. - 기존 Adapter의 span size는 position 기반으로 계산하므로 서버 정렬 보장과 별개로 mapper 또는 UI state에서
rank기준으로 한 번 더 정렬한다. creatorId=0item은 기존 위젯의 차단 상태 UI를 적용하고, 클릭 listener가 동작하지 않도록 보장한다.
Edge Cases
rank < 1item은 기존CreatorRankingItem생성 조건에 맞지 않으므로 표시하지 않는다.nickname이 빈 값이면 빈 문자열 그대로 표시하되, 별도 대체 문구는 추가하지 않는다.profileImageUrl이 빈 값이거나 이미지 로딩에 실패하면 기존loadUrl/이미지 로딩 정책을 따른다.creatorId=0인 차단 관계 item은 상세 이동을 막고, 기존 차단 상태 위젯 정책에 따라 이미지 블러와 이름 비노출/대체문구를 적용한다.- 동일 rank가 중복되면 서버 데이터 오류로 보고 클라이언트는 받은 순서 또는
rank정렬 결과를 그대로 표시한다. 중복 보정 UI는 추가하지 않는다.
Creator Ranking View Rewrite Follow-up
크리에이터 랭킹 view는 후속 구현에서 기존 view를 부분 보정하지 않고 새로 작성한다. 이 문서 갱신은 rewrite 요구사항과 구현 계획만 정리하며, mapper/API 동작 변경이나 production code 변경은 포함하지 않는다.
Figma References
- 1 per row: Figma
24:5659 - 2 per row: Figma
24:5660 - 3 per row: Figma
24:5668 - 11~20: Figma
24:5670
Rewrite Requirements
- 신규 크리에이터 랭킹 view는
ConstraintLayout을 사용해 작성한다. - 신규 크리에이터 랭킹 view에는
FrameLayout을 사용하지 않는다. - adapter view type은 두 개만 둔다.
- ranks
1~10 - ranks
11~20
- ranks
rank > 20값은 이번 문서 갱신에서 mapper/API 동작을 바꾸지 않는다. 별도 요구가 있기 전까지 현재 구현의 lower-row 처리 방식은 유지할 수 있다.- rank change와
NEW표시 로직은CreatorRankingDeltaPresentation과HomeCreatorRankingMappers의 기존 의미를 유지한다. isNew,rankChange,showRankChange,RankingChangeType매핑 의미는 변경하지 않는다.
Text Size Policy
| Rank group | Row basis | Rank | Name | Delta |
|---|---|---|---|---|
1~10 |
1 item row | 96sp |
32sp |
16sp |
1~10 |
2 item row | 54sp |
22sp |
16sp |
1~10 |
3 item row | 36sp |
14sp |
14sp |
11~20 |
lower-row Figma basis | 40sp |
18sp |
기존 lower-row 표시 정책 유지 |
View Size Policy
- XML/Kotlin에서 layout sizing 목적으로 고정 width/height를 새로 도입하지 않는다.
- layout sizing은
wrap_content,match_parent, margins, padding, constraints, match-constraint, 측정된 available width, aspect handling을 필요에 따라 조합한다. - 텍스트 크기, rank/name/delta 배치 모델, image aspect 계산처럼 화면 표현을 결정하는 값은 순수 로직으로 분리해 테스트할 수 있게 한다.
Testing Policy
- 테스트는 placement, text-style model, mapper, delta presentation, item behavior 같은 logic contract에만 작성한다.
- view size, margin, padding, constraints,
TextViewdimensions, inflated layout params, visibility attributes에 대한 UI layout/visual test는 작성하지 않는다. CreatorRankingDeltaPresentation과HomeCreatorRankingMappers의 기존 rank change 및NEW의미가 유지되는지는 로직 테스트로 확인한다.
8. UX / UI Expectations
- 전체 배경은 기존 홈과 동일한 black 계열을 유지한다.
- TitleBar와 Text Tab bar는 Figma
24:5654및 기존 홈 추천 구현과 동일한 위치/스타일을 유지한다. - Capsule Tab bar를 제거한 상태에서도 Text Tab bar 아래 여백이 과도하게 남지 않아야 한다.
- 랭킹 목록 좌우 margin과 item gap은 기존
CreatorRankingAdapter와 Figma 목록 폭을 기준으로 맞춘다. - 순위 숫자
TextView의 XML 및 Kotlin layout width/height는wrap_content를 유지하고, Kotlin은 variant별 텍스트 크기와 rank area의 spacing/margin만 조정한다. - 1위, 2
7위, 810위, 11위 이후 순위 영역은 rank 숫자와 rank-num을 하나의 세로 rank group으로 묶어 해당 영역 안에서 가운데 정렬한다. rank-num은 순위 숫자 아래에서 같은 rank area의 중앙 정렬 흐름을 따르며, 11위 이후 Horizontal은 기존ll_creator_ranking_rank_group의 vertical/center 배치를 유지한다.- 8~10위 Compact small은 두 자리 순위(
10)가 잘리지 않도록 rank group도 고정 폭이 아닌wrap_content로 유지하고, rank와 rank-num 사이 간격을 Kotlin margin으로 더 좁힌다. - 8~10위 Compact small 닉네임은 3열 카드 폭에서 답답하지 않도록 기존 14sp보다 작게 표시한다.
랭킹탭 선택 상태가 흰색 텍스트로 명확히 드러나야 한다.- 1위~20위까지 응답이 내려오면 Figma 예시처럼 20위까지 자연스럽게 스크롤로 확인할 수 있어야 한다.
- 긴 닉네임은 기존 위젯의 ellipsize/line 제한 정책을 따른다.
9. Technical Constraints
- Android XML Views, ViewBinding, RecyclerView 기반 기존 구조를 유지한다.
- 신규 API DTO, Repository, ViewModel, mapper, UI model은 기존 홈 추천 패턴을 확인해
kr.co.vividnext.sodalive.v2.main.home하위에 둔다. - 신규
Activity,Fragment,ViewModel및 연결 하위 코드는kr.co.vividnext.sodalive.v2패키지 하위에 작성한다. - 화면은 우선
HomeMainFragment와fragment_v2_main_home.xml의 기존 상단 구조를 확장해 구현한다. - 기존
CreatorRankingAdapter.createGridLayoutManager()를 사용해 span 정책을 유지한다. - 크리에이터 프로필 이동은
creatorId > 0일 때만 기존UserProfileActivity와Constants.EXTRA_USER_ID사용 패턴을 재사용한다. - 네트워크/API 등록은 기존
AppDI.kt의 홈 추천 API/Repository/ViewModel 등록 패턴을 따른다. - 구현 전
docs/20260608_크리에이터_랭킹_페이지/plan-task.md를 작성한 뒤 해당 계획에 따라 최소 구현한다.
10. Metrics
랭킹탭 선택 시GET /api/v2/home/rankings/creators응답 item이CreatorRankingAdapter에 전달된다.- Figma
24:5654의 Capsule Tab bar는 화면에 존재하지 않는다. - 1위, 2
7위, 810위, 11위 이후 variant가 기존 위젯 정책과 일치한다. - 순위 숫자
TextView는 모든 variant에서wrap_contentwidth/height,Gravity.CENTER,includeFontPadding=false를 유지한다. - 1위, 2
7위, 810위, 11위 이후 rank group은 순위 숫자와 rank-num을 같은 rank area 중앙에 세로 정렬한다. - Kotlin은 Compact 2열 순위
54sp/닉네임22sp/rank-num16sp, Compact 3열 순위36sp/닉네임13sp/rank-num14sp텍스트 크기 계약을 유지한다. - Compact 3열 rank group은
wrap_contentwidth를 유지하고,rank=10도 전체 숫자가 표시되어야 한다. isNew=trueitem은 New badge로 표시된다.isNew=false && (rankChange=null || rankChange=0)item은 유지 상태로 표시된다.rankChange > 0item은 상승,rankChange < 0item은 하락으로 표시된다.showRankChange=false응답에서는 rank-num 영역이 완전히 숨겨진다.rank < 1item은 표시되지 않는다.creatorId=0item은 클릭되지 않고,creatorId>0item만UserProfileActivity로 이동한다.- API 응답은 클라이언트에서
rank기준 오름차순으로 한 번 더 정렬된다. - 빈 응답, API 실패, 이미지 실패가 crash 없이 처리된다.
- 관련 mapper/unit test,
HomeMainFragmentlayout test,compileDebugKotlin,ktlintCheck가 성공한다. - 후속 rewrite에서는 신규 크리에이터 랭킹 view가
ConstraintLayout기반이고FrameLayout을 사용하지 않는다. - 후속 rewrite에서는 adapter view type이 ranks
1~10, ranks11~20두 개뿐이다. - 후속 rewrite에서는 ranks
1~10텍스트 크기가 1 item row96sp/32sp/16sp, 2 item row54sp/22sp/16sp, 3 item row36sp/14sp/14sprank/name/delta 정책을 따른다. - 후속 rewrite에서는 ranks
11~20이 Figma24:5670lower-row 기준으로 rank40sp, name18sp를 사용한다. - 후속 rewrite 테스트는 logic contract 중심이며, UI layout/visual 속성 검증 테스트는 작성하지 않는다.
11. Open Questions
- 없음.
12. References
- Figma: https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=24-5654&m=dev
- Figma 1 per row:
24:5659 - Figma 2 per row:
24:5660 - Figma 3 per row:
24:5668 - Figma 11~20 lower row:
24:5670 - 기존 크리에이터 랭킹 위젯 PRD:
docs/prd/20260520_크리에이터랭킹위젯컴포넌트_prd.md - 기존 홈 추천 PRD:
docs/20260601_메인_홈_추천_UI와_API_연동/prd.md - 기존 위젯 패키지:
app/src/main/java/kr/co/vividnext/sodalive/v2/widget/creatorranking
13. Verification Log
- 2026-06-29: 크리에이터 랭킹 view rewrite를 완료했다.
CreatorRankingAdapter는 ranks1~10top-card와 ranks11+lower-row 두 view type만 사용하며,CreatorRankingTopCardView와CreatorRankingLowerRowView는ConstraintLayout기반으로 작성했다. 기존FrameLayout기반 Large/Compact/Horizontal view와 layout calculator/card variant는 creator ranking 경로에서 제거했다. - 2026-06-29: rank change와
NEW표시는CreatorRankingDeltaPresentation, API mapper 의미는HomeCreatorRankingMappers를 유지했다. 텍스트 크기는CreatorRankingTextStyle순수 로직으로 분리했고, 테스트는 placement/text-style/mapper/delta/item behavior 같은 logic contract 중심으로 정리했다. 최종 검증으로 creator ranking tests, main.home tests, mapper test,mergeDebugResources,compileDebugKotlin,ktlintCheck,git diff --check, obsolete reference/FrameLayout 검색이 통과했다. - 2026-06-29: 후속 요구사항으로 8~10위 Compact small에서 rank와 rank-num 간격이 넓고
10표시가 답답해 보이는 문제를 확인했다. 원인은 rankTextView가 아니라CreatorRankingCompactCardView.positionSmall()에서 parentll_creator_ranking_rank_group폭이52 * scale로 고정되는 점으로 정리했다. PRD에 Compact small rank groupwrap_content,rank=10표시 보장, rank/rank-num 간격 축소, 닉네임 13sp 요구사항을 반영했다. - 2026-06-29: Compact small 보정으로
ll_creator_ranking_rank_groupwidth를WRAP_CONTENT로 변경하고, 닉네임을13sp로 줄였으며, rank-num top margin을-4 * scale로 조정했다.CreatorRankingAdapterLayoutTest,mergeDebugResources,compileDebugKotlin,ktlintCheck,git diff --check가 통과했다. - 2026-06-29: 후속 요구사항으로 크리에이터 랭킹 카드 rank-area 계약을 갱신했다. 모든 variant의
tv_creator_ranking_rankXML/Kotlin width/height는wrap_content를 유지하고, Kotlin은 Compact medium54sp/22sp/16sp, Compact small36sp/14sp/14sp텍스트 크기와 rank group/delta spacing만 조정하며, Large/Compact/Horizontal 모두 순위 숫자와 rank-num을 rank area 중앙에 세로 정렬해야 한다. - 2026-06-29:
CreatorRankingAdapterLayoutTest를 새 계약으로 갱신한 뒤 production 수정 전 실행해 Large/Compact rank group 미구현 및 Horizontal rankTextView고정 layoutParams 때문에 실패함을 확인했다. 이후 Large/Compact XML에 rank group을 추가하고 Kotlin의 rankTextView고정 width/height 설정을 제거했으며,./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingAdapterLayoutTest",./gradlew :app:mergeDebugResources,./gradlew :app:compileDebugKotlin이 모두BUILD SUCCESSFUL로 통과했다.rg로 Kotlin 내 rankTextView고정 sizing 잔여 없음과 XMLwrap_content유지도 확인했다. - 2026-06-29: Horizontal rank-num 간격도 XML 고정 margin 대신 Kotlin scale 기반 spacing으로 옮겼다. 재검증으로
CreatorRankingAdapterLayoutTest,mergeDebugResources,compileDebugKotlin이 모두BUILD SUCCESSFUL로 통과했고,rg로 XML 고정 margin 및 Kotlin rankTextView고정 sizing 잔여 없음도 확인했다. - 2026-06-29: 후속 요구사항으로 Figma
24:5668,24:5661,24:5670을 확인했다. 메인 홈 랭킹 탭에서 item 간격은8dp, 3열 Compact는 순위36sp/닉네임14sp/rank-num 숫자14sp, 2열 Compact는 순위54sp/닉네임22sp/rank-num 숫자16sp, 11위 이후 Horizontal은 순위와 New/순위 변동 표시가 rank group 내부에서 바로 이어지는 세로 배치를 유지해야 한다. - 2026-06-29: 위 기준에 따라
CreatorRankingCompactCardView,CreatorRankingAdapter,HomeMainFragment를 최소 수정했다. 3열 Compact 순위/변동 텍스트 크기, item 폭 계산 기준, 실제 RecyclerView item decoration 간격8dp를 보정했고, 2열 Compact 및 11위 이후 Horizontal 배치는 회귀 테스트로 유지했다. 리뷰 게이트에서 지적된 실제GridLayoutManager간격 보장 문제는 전용CreatorRankingItemDecoration과 Fragment 연결 테스트를 추가해 보완했다. - 2026-06-25: Figma
24:5659의 rank component screenshot을 확인했다. rank 숫자와 rank-num은 좌표상 분리되어 있으나, 실제 구현에서는includeFontPadding=false가 이미 적용된 상태에서도 Pattaya glyph가 고정 rank box 하단에 붙어 보여 rank-num과 시각적으로 붙는 문제가 발생할 수 있음을 확인했다. - 2026-06-25: 후속 요구사항으로 크리에이터 랭킹 카드의 기존 Figma 위치값(
rank-numtop: 1위 116, 27위 70, 810위 50, 11위 이후 rank group 내부 배치)은 유지하고, 순위 숫자TextView내부 하단 padding만 보정해 폰트별 glyph 하단 차이가 rank-num 간격을 침범하지 않도록 한다. - 2026-06-25: 크리에이터 랭킹 Large/Compact/Horizontal 카드에 scale 기반 하단 padding을 적용하고,
CreatorRankingAdapterLayoutTest에서includeFontPadding=false와 padding 값을 검증하도록 했다.CreatorRankingAdapterLayoutTest,creatorranking.*,mergeDebugResources,compileDebugKotlin은 통과했고,ktlintCheck는 기존 전역 위반으로 실패했다. - 2026-06-08:
docs/prd/sample-prd.md,docs/agent-guides/work-plan-docs.md, 기존 크리에이터 랭킹 위젯 PRD,CreatorRankingItem,CreatorRankingAdapter,CreatorRankingDeltaPresentation,RankingChangeType,HomeMainFragment를 확인했다. - 2026-06-08: Figma
24:5654의 design context와 screenshot을 확인했다. 화면에는 Capsule Tab bar가 포함되어 있으나 사용자 요구에 따라 PRD 범위에서 제외했다. - 2026-06-08: 이번 단계는 PRD 작성만 수행했으며 구현/빌드/테스트는 실행하지 않았다.
- 2026-06-08: 사용자 추가 제공 정보에 따라
rankChange의 양수/음수/0 매핑,showRankChange=false시 rank-num 완전 숨김, 클라이언트rank재정렬,creatorId=0차단 관계 및 클릭 불가 정책을 반영했다. - 2026-06-08: 사용자 추가 제공 정보에 따라 랭킹 item 터치 시
UserProfileActivity이동 외 별도 analytics/logging을 추가하지 않는 것으로 확정하고 Open Questions를 없음으로 정리했다. - 2026-06-08: 최종 검증으로
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.*",./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeCreatorRankingMapperTest",./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainFragmentLayoutTest",./gradlew :app:mergeDebugResources,./gradlew :app:compileDebugKotlin,./gradlew :app:ktlintCheck를 순차 실행했고 모두BUILD SUCCESSFUL로 통과했다. Gradle deprecated feature warning은 기존 빌드 경고로 보고 수정하지 않았다. - 2026-06-09: 사용자 확인에 따라 Figma상 순위 숫자의 margin 값 자체를 추가하지 않고, 기존 고정 텍스트 박스 크기 안에서 텍스트 정렬을 맞추는 후속 보정 요구사항을 추가했다.
- 2026-06-09: 순위 TextView 내부 중앙 정렬 보정 후
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingAdapterLayoutTest",./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.*",./gradlew :app:mergeDebugResources가 모두BUILD SUCCESSFUL로 통과했다. - 2026-06-09: Figma
24:5658design context와 screenshot을 재확인해 순위 숫자 박스 및 rank-num 위치의 최신 기준값을 후속 보정 요구사항으로 반영했다. - 2026-06-09: 최신 Figma 수치 보정 후
./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.CreatorRankingAdapterLayoutTest",./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.creatorranking.*",./gradlew :app:mergeDebugResources,./gradlew :app:ktlintCheck가 모두BUILD SUCCESSFUL로 통과했다. - 2026-06-29: 후속 rewrite 범위로 크리에이터 랭킹 view를 새로 작성하는 요구사항을 추가했다. 신규 view는
ConstraintLayout을 사용하고FrameLayout을 사용하지 않으며, adapter view type은 ranks1~10과 ranks11~20두 개만 둔다.rank > 20은 이번 문서 갱신에서 mapper/API 동작을 바꾸지 않고, 별도 요구 전까지 현재 lower-row 처리를 유지할 수 있다고 기록했다. - 2026-06-29: Figma
24:5659,24:5660,24:5668,24:5670기준과 ranks1~10, ranks11~20텍스트 크기 정책을 추가했다. rank change와NEW로직은CreatorRankingDeltaPresentation및HomeCreatorRankingMappers의미를 유지하고, 테스트는 placement, text-style model, mapper, delta presentation, item behavior 같은 logic contract 중심으로 제한한다고 기록했다.