fix(home): 홈 추천 후속 검증을 반영한다
This commit is contained in:
@@ -6,9 +6,10 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
|
||||
---
|
||||
|
||||
## 2. Problem
|
||||
- 메인 홈 추천 화면은 라이브, 배너, 최근 활동, 신규 데뷔, 첫 오디오 콘텐츠, AI 캐릭터, 응원 크리에이터, 인기 커뮤니티 등 여러 데이터 섹션을 한 화면에 표시해야 한다. `genreCreators` 응답 계약은 유지하지만 장르별 크리에이터 UI는 추천 탭에 표시하지 않는다.
|
||||
- 메인 홈 추천 화면은 라이브, 배너, 최근 활동, 신규 데뷔, AI 캐릭터, 응원 크리에이터, 인기 커뮤니티 등 여러 데이터 섹션을 한 화면에 표시해야 한다. `genreCreators` 응답 계약은 유지하지만 장르별 크리에이터 UI는 추천 탭에 표시하지 않는다.
|
||||
- Figma에는 이미 `live`, `banner`, `section-title`, `contents`, `chat-thumbnail`, `profile`, `feed` 등 재사용 가능한 형태가 다수 포함되어 있으므로, 기존에 생성된 widget을 최대한 활용해야 한다.
|
||||
- `HomeActiveCreatorItem.activityType`은 백엔드 enum code 그대로 표시하면 사용자에게 부자연스러우므로 `LIVE`, `LIVE_REPLAY`, `AUDIO`, `COMMUNITY`를 다국어 처리 가능한 표시 문자열로 변환해야 한다.
|
||||
- `모두 팔로우 하기` 버튼은 현재 터치 즉시 여러 크리에이터를 팔로우하는 API를 호출하므로, 사용자가 대상과 영향을 다시 확인하지 못한 채 의도하지 않은 크리에이터까지 팔로우할 수 있다.
|
||||
- 사업자 정보 섹션은 별도 외부 라이브러리 없이 최대 3줄 말줄임과 더보기/접기 토글을 제공해야 한다.
|
||||
- Figma에 포함된 일부 섹션은 이번 범위에서 제외되어야 하므로 구현 범위를 명확히 분리해야 한다.
|
||||
|
||||
@@ -23,6 +24,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
|
||||
- `추천 필모그래피`, `또 다른 모습` 섹션은 만들지 않는다.
|
||||
- 최하단 사업자 정보 섹션은 표시하되, 기본 최대 3줄 말줄임과 `더보기`/`접기` 토글을 제공한다.
|
||||
- `HomeActiveCreatorItem.activityType`은 백엔드 code를 앱 내부 enum 또는 mapper로 변환하고, 표시 문구는 string resource 기반 다국어 처리를 적용한다.
|
||||
- 여러 크리에이터를 한 번에 팔로우하는 모든 `모두 팔로우` 동작은 API 호출 전에 공통 확인창을 표시하고, 사용자가 명시적으로 확인한 경우에만 기존 팔로우 API를 호출한다.
|
||||
- API DTO, 화면 상태, empty/error/loading 정책, click routing은 구현 계획에서 검증 가능하도록 정리한다.
|
||||
|
||||
---
|
||||
@@ -38,6 +40,9 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
|
||||
- 이번 범위에서 `랭킹`, `팔로잉`용 별도 Fragment 또는 숨김 View를 미리 만들지 않는다.
|
||||
- 기존 레거시 홈 화면 전체 리팩터링은 포함하지 않는다.
|
||||
- Figma에 없는 skeleton loading, shimmer, 임의 애니메이션, 추가 badge는 만들지 않는다.
|
||||
- 모두 팔로우 확인 절차를 위해 신규 Dialog component나 layout을 만들지 않고 기존 `V2ModalDialog`를 재사용한다.
|
||||
- 모두 팔로우 API endpoint, request body, 성공·실패 처리와 완료 버튼 UI는 변경하지 않는다.
|
||||
- 현재 숨김 상태인 `genreCreators` 섹션이나 모두 팔로우 버튼을 다시 노출하지 않는다.
|
||||
|
||||
---
|
||||
|
||||
@@ -51,6 +56,7 @@ Figma `home_001` 화면(`24:5514`)을 기준으로 메인 홈 추천 영역을
|
||||
- 사용자는 홈에서 현재 라이브 중인 크리에이터와 추천 콘텐츠를 빠르게 탐색하고 싶다.
|
||||
- 사용자는 배너를 스와이프하거나 터치해 관련 이벤트, 크리에이터, 시리즈, 외부 링크 또는 앱 내부 딥링크로 이동하고 싶다.
|
||||
- 사용자는 최근 활동한 크리에이터의 활동 유형을 `라이브`, `오디오`, `커뮤니티`처럼 이해 가능한 문구로 보고 싶다.
|
||||
- 사용자는 여러 크리에이터를 한 번에 팔로우하기 전에 확인창에서 동작을 검토하고, 확인하거나 취소할 수 있기를 원한다.
|
||||
- 사용자는 인기 커뮤니티 글을 읽다가 사업자 정보가 길어도 홈 화면 탐색이 과도하게 방해받지 않기를 기대한다.
|
||||
- 개발자는 기존 v2 widget을 최대한 재사용해 화면별 UI 중복과 스타일 차이를 줄이고 싶다.
|
||||
|
||||
@@ -196,7 +202,7 @@ Figma 최하단 사업자 정보 섹션(`218:2058`)은 외부 라이브러리
|
||||
- 세로 스크롤 시 title-bar와 `TextTabBarView`는 화면에 유지하고, `TextTabBarView` 아래 추천 content 영역만 스크롤되도록 구성한다.
|
||||
|
||||
### 모두 팔로우 하기
|
||||
`최근 응원이 많은 크리에이터` 섹션에는 모두 팔로우 버튼을 제공한다. `장르별 크리에이터`는 추천 탭 UI에 표시하지 않으므로 모두 팔로우 버튼도 제공하지 않는다.
|
||||
여러 크리에이터를 한 번에 팔로우하는 모든 `모두 팔로우` 동작은 API 호출 전에 공통 확인 절차를 거친다. 현재 구현 대상은 실제 노출 중인 `최근 응원이 많은 크리에이터` 섹션으로 제한한다. `장르별 크리에이터`는 추천 탭 UI에 표시하지 않으므로 모두 팔로우 버튼과 확인창도 제공하지 않는다.
|
||||
|
||||
#### API Requirements
|
||||
- API는 `POST /api/v2/home/recommendations/creators/follow`를 사용한다.
|
||||
@@ -228,6 +234,23 @@ data class FollowRecommendedCreatorsRequest(
|
||||
- 문구는 string resource로 관리한다.
|
||||
- 버튼 상태는 API success 후 중복 호출되지 않도록 disabled 또는 click 무시 상태로 전환한다.
|
||||
|
||||
#### Confirm Dialog Requirements
|
||||
- 기본 상태의 `모두 팔로우 하기` 버튼을 터치하면 기존 `V2ModalDialog`의 취소·확인 2버튼 구성을 표시한다.
|
||||
- 최초 버튼 터치만으로는 `POST /api/v2/home/recommendations/creators/follow`를 호출하지 않는다.
|
||||
- Dialog 제목은 `모두 팔로우`, 설명은 `목록의 크리에이터를 모두 팔로우하시겠어요?`, 취소 버튼은 `취소`, 확인 버튼은 `팔로우 하기`로 표시한다.
|
||||
- `팔로우 하기`를 터치하면 Dialog를 닫은 뒤 해당 표시 섹션의 `creatorIds`로 기존 모두 팔로우 API를 한 번 호출한다.
|
||||
- `취소`를 터치하면 Dialog만 닫고 API를 호출하거나 버튼 상태를 변경하지 않는다.
|
||||
- 완료 상태 버튼 또는 빈 `creatorIds`에서는 Dialog와 API를 모두 실행하지 않는다.
|
||||
- Dialog 바깥 영역과 시스템 뒤로가기에 대한 닫기 정책은 기존 `V2ModalDialog`의 non-cancelable 동작을 유지하며, 취소는 명시적인 `취소` 버튼으로 수행한다.
|
||||
- 공통 정책은 이후 다른 화면이나 섹션에 `모두 팔로우` 동작이 추가될 때도 동일하게 적용하지만, 이번 구현에서는 범용 wrapper나 신규 추상화를 미리 만들지 않는다.
|
||||
- 표시 문자열은 아래 resource key로 한국어·영어·일본어에 모두 제공하고, 기존 `cancel` resource를 재사용한다.
|
||||
|
||||
| Resource key | 한국어 | English | 日本語 |
|
||||
|---|---|---|---|
|
||||
| `home_recommendation_follow_all_confirm_title` | `모두 팔로우` | `Follow all` | `すべてフォロー` |
|
||||
| `home_recommendation_follow_all_confirm_description` | `목록의 크리에이터를 모두 팔로우하시겠어요?` | `Would you like to follow all creators in this list?` | `このリストのクリエイターをすべてフォローしますか?` |
|
||||
| `home_recommendation_follow_all_confirm_button` | `팔로우 하기` | `Follow` | `フォローする` |
|
||||
|
||||
### 추천 페이지 위젯 수정
|
||||
추천 페이지에 표시되는 기존 widget은 화면 요구사항에 맞춰 최소 범위로 확장한다. 별도 PRD로 분리하지 않고, 메인 홈 추천 UI의 표시 계약으로 이 문서에 함께 기록한다.
|
||||
|
||||
@@ -277,10 +300,6 @@ HomeRecommendation 화면
|
||||
│ ├─ Figma instance: section-title, creater
|
||||
│ ├─ 재사용: view_section_title
|
||||
│ └─ 신규: 최근 데뷔 크리에이터 카드 UI, item root `185dp x 234dp`, radius `14dp` 전체 clip
|
||||
├─ 첫 오디오 콘텐츠: firstAudioContents
|
||||
│ ├─ Figma instance: contents, profile
|
||||
│ ├─ 재사용: v2.widget.AudioContentCardView
|
||||
│ └─ 신규: 카드 하단 profile 결합 adapter item 필요 여부 확인
|
||||
├─ AI 캐릭터: aiCharacters
|
||||
│ ├─ Figma instance: section-title, chat-thumbnail
|
||||
│ ├─ 재사용: view_section_title
|
||||
@@ -334,6 +353,7 @@ HomeRecommendation 화면
|
||||
- `link`가 웹 URL이면 `Intent.ACTION_VIEW`를 사용해 외부 웹 URL로 이동한다.
|
||||
- `link`가 내부 딥링크이면 기존 딥링크 실행 정책에 따라 앱 내부 딥링크를 실행한다.
|
||||
- 웹 URL도 내부 딥링크도 아닌 `link`는 이동하지 않는다.
|
||||
- 모두 팔로우 확인창의 확인 버튼을 빠르게 반복 터치해도 기존 `V2ModalDialog`의 중복 클릭 방지 계약에 따라 API 요청은 한 번만 시작한다.
|
||||
|
||||
---
|
||||
|
||||
@@ -346,8 +366,9 @@ HomeRecommendation 화면
|
||||
- 각 섹션 제목은 기존 `view_section_title`을 사용한다.
|
||||
- `최근 데뷔한 크리에이터` item은 기존 `205dp x 259dp` 비율을 유지해 `185dp x 234dp`로 축소하고, 이미지뿐 아니라 dim gradient와 닉네임을 포함한 item root 전체가 `14dp` rounded corner로 잘려야 한다.
|
||||
- `최근 응원이 많은 크리에이터`의 모두 팔로우 버튼은 success 전/후 상태가 명확히 구분되어야 한다. `장르별 크리에이터`는 추천 탭 UI에 표시하지 않으므로 버튼도 노출하지 않는다.
|
||||
- `최근 응원이 많은 크리에이터`의 기본 상태 모두 팔로우 버튼을 터치하면 기존 V2 공통 디자인의 확인창이 먼저 표시되고, 사용자의 확인 전에는 네트워크 요청이 시작되지 않아야 한다.
|
||||
- 인기 커뮤니티는 keyword 없이 본문, 선택적 이미지, 유료 잠금 상태, reaction row를 보여야 한다.
|
||||
- 유료 미구매 커뮤니티 이미지는 내용을 바로 읽을 수 없도록 blur/lock overlay가 적용되어야 한다.
|
||||
- 유료 미구매 커뮤니티는 원본 `imageUrl`을 로드하지 않고 lock overlay와 가격 capsule만 표시한다. 별도 안전 preview 필드가 제공되기 전까지 client-side blur를 위해 원본 이미지를 요청하지 않는다.
|
||||
- 유료 구매 완료 또는 무료 커뮤니티 이미지는 overlay 없이 표시하고, `구매완료` 태그는 표시하지 않는다.
|
||||
- 가로 목록은 화면 밖 다음 item이 일부 보이도록 Figma의 peek 느낌을 유지한다.
|
||||
- 커뮤니티 본문과 사업자 정보는 긴 텍스트가 화면 폭을 밀어내지 않아야 한다.
|
||||
@@ -359,11 +380,12 @@ HomeRecommendation 화면
|
||||
|
||||
## 9. Technical Constraints
|
||||
- 현재 프로젝트는 Android XML Views + Kotlin + ViewBinding 기반이므로 XML layout, RecyclerView/adapter, custom view 패턴을 우선한다.
|
||||
- UI는 기존 `kr.co.vividnext.sodalive.v2.main.HomeMainFragment`에 구현한다.
|
||||
- UI는 현재 canonical 경로인 `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`의 `kr.co.vividnext.sodalive.v2.main.home.HomeMainFragment`에 구현한다. 과거 `kr.co.vividnext.sodalive.v2.main.HomeMainFragment` 경로는 현재 존재하지 않는다.
|
||||
- `HomeMainFragment`는 이번 범위에서 추천 content만 직접 구성하며, `ViewPager2`, `FragmentStateAdapter`, tab별 신규 Fragment 3개 구조는 도입하지 않는다.
|
||||
- `TextTabBarView` 아래 추천 content 영역만 `NestedScrollView` 또는 동등한 단일 세로 스크롤 컨테이너로 구성한다.
|
||||
- 신규 API/Repository/ViewModel 및 그와 연결된 하위 코드는 `kr.co.vividnext.sodalive.v2` 패키지 하위에 작성한다.
|
||||
- 기존 `kr.co.vividnext.sodalive.v2.widget.*` 컴포넌트를 우선 재사용한다.
|
||||
- 모두 팔로우 확인 UI는 기존 `kr.co.vividnext.sodalive.v2.components.modal.V2ModalDialog`를 재사용하고 공통 모달 component나 layout을 수정하지 않는다.
|
||||
- 기존 API 인터페이스에 메서드를 추가하지 않고, 홈 추천 전용 신규 API 인터페이스를 만든다.
|
||||
- 이미지 로딩 라이브러리를 새로 추가하지 않고 기존 호출부의 이미지 로딩 방식을 따른다.
|
||||
- 외부 라이브러리를 추가하지 않는다.
|
||||
@@ -380,13 +402,15 @@ HomeRecommendation 화면
|
||||
- `LIVE`, `LIVE_REPLAY`, `AUDIO`, `COMMUNITY` 표시 문자열이 string resource 기반으로 매핑된다.
|
||||
- `HomeMainFragment`에서 `view_title_bar_home`, `TextTabBarView`, `view_section_title` 재사용이 확인된다.
|
||||
- `FeedCommunityView`에서 keyword 영역이 추천 페이지에 노출되지 않고, 이미지와 유료 미구매 overlay가 표시된다.
|
||||
- `AudioContentCardView`에서 `ic_content_tag_point`, `무료`, `FIRST` 태그가 조건에 맞게 표시되고, `ic_content_tag_original`은 표시되지 않는다.
|
||||
- `HomeAiCharacterItem.creatorId`가 UI model까지 보존되고, AI 캐릭터 item 터치 시 `CreatorChannelActivity`에 `creatorId`가 전달된다.
|
||||
- `HomeActiveCreatorItem.creatorId`가 UI model까지 보존되고, `LIVE` item은 `targetId` 유무에 따라 라이브 룸 또는 크리에이터 채널 route로 분기된다.
|
||||
- 최근 활동 `LIVE`의 `targetId == null && creatorId <= 0L` 입력에서 route가 생성되지 않는다.
|
||||
- 최근 활동 `LIVE`의 라이브 룸 진입이 `LiveActionCoordinator`를 사용해 로그인·본인인증·성인 콘텐츠 보기 설정 정책을 우회하지 않는다.
|
||||
- 제외 대상인 `추천 필모그래피`, `또 다른 모습` 섹션이 화면에 생성되지 않는다.
|
||||
- 최근 응원이 많은 크리에이터 모두 팔로우 API success 후 버튼이 `모두 팔로우 완료`와 `ic_new_following` 상태로 변경된다.
|
||||
- 최근 응원이 많은 크리에이터의 기본 상태 모두 팔로우 버튼 터치 직후에는 확인창만 표시되고 API 호출 횟수는 `0`이다.
|
||||
- 확인창에서 `취소`를 선택하면 API 호출 횟수는 계속 `0`이고 버튼 상태가 유지되며, `팔로우 하기`를 선택하면 기존 API가 정확히 한 번 호출된다.
|
||||
- 모두 팔로우 확인창의 제목·설명·확인 버튼 문구가 한국어·영어·일본어 string resource로 제공된다.
|
||||
- 사업자 정보는 기본 3줄 말줄임, 더보기 후 전체 표시, 접기 후 3줄 복귀가 동작한다.
|
||||
- 기존 v2 widget 재사용 범위가 구현 diff에서 확인된다.
|
||||
- 관련 unit test, resource merge, `./gradlew :app:testDebugUnitTest` 또는 구현 범위에 맞는 단일 테스트가 성공한다.
|
||||
@@ -399,11 +423,15 @@ HomeRecommendation 화면
|
||||
- 인증 token 처리 방식은 아직 제공되지 않았다. 구현 전 기존 `HomeApi` 확장 지점과 공통 인증 interceptor 사용 여부를 확인해야 한다.
|
||||
- `cheerCreators`의 profile grid는 기존 profile widget이 저장소에 있는지 추가 확인 후 재사용/신규를 결정한다. `genreCreators`는 응답/매핑 계약만 유지하고 추천 탭 UI에는 표시하지 않는다.
|
||||
- 배너 이동 정책은 `type` 없이 `eventItem`, `creatorId`, `seriesId`, `link` 값 기준으로 처리하는 것으로 확정됐다. `link`가 내부 딥링크이면 기존 딥링크 실행 정책을 사용한다.
|
||||
- `activityAt`, `releaseDate`, `createdAt`, `beginDateTime`의 표시 포맷은 기존 시간 formatter 재사용 여부를 구현 계획에서 확인한다.
|
||||
- `activityAt`, `createdAt`, `beginDateTime`의 표시 포맷은 기존 시간 formatter 재사용 여부를 구현 계획에서 확인한다.
|
||||
|
||||
---
|
||||
|
||||
## 12. 검증 기록
|
||||
- 2026-07-31: PRD와 계획/TASK 보완 후 신규 범위의 placeholder·모순·요구사항 추적성을 자체 검토했다. `git status --short`로 변경 파일이 두 문서뿐임을 확인했고, placeholder 검색과 `git diff --check`는 출력 없이 성공했다. `./gradlew tasks --all`은 최초 sandbox 실행에서 사용자 Gradle cache lock 접근 제한으로 실패했으나 승인된 동일 명령 재실행은 `BUILD SUCCESSFUL`로 완료되어 계획에 기재한 Gradle task 이름의 유효성을 확인했다. production·test·resource 파일은 변경하지 않았다.
|
||||
- 2026-07-31: `deep-interview` 결과, 모든 `모두 팔로우` 동작에 API 호출 전 확인 절차를 적용하는 공통 정책을 확정했다. 현재 구현 대상은 실제 노출 중인 `최근 응원이 많은 크리에이터` 섹션으로 제한하고, 숨겨진 `genreCreators` UI는 다시 노출하지 않는다. 저장소의 `HomeMainFragment`가 `cheerCreators` 전체 id를 `HomeRecommendationViewModel.followCreators()`에 즉시 전달하는 현재 흐름과, 취소·확인 2버튼 및 중복 클릭 방지를 지원하는 기존 `V2ModalDialog`를 확인했다. 확인창은 제목 `모두 팔로우`, 설명 `목록의 크리에이터를 모두 팔로우하시겠어요?`, 확인 `팔로우 하기`, 취소 `취소`로 확정하고 한국어·영어·일본어 resource를 계획했다. 이번 요청은 PRD와 계획/TASK 보완까지만 수행하며 구현 코드는 변경하지 않는다.
|
||||
- 2026-07-31: `REV-P7-001` 후속으로 유료 미구매 인기 커뮤니티의 원본 이미지 미로드 보안 결정을 PRD에 재정렬했다. commit `2d58a876`에서 client-side blur 원본 로드가 재도입된 회귀를 복구해, 무료·구매 완료 이미지는 기존대로 로드하고 유료 미구매는 원본 `imageUrl` 요청 없이 lock overlay와 가격만 유지한다.
|
||||
- 2026-07-31: R7.1 RED/GREEN 검증으로 `HomeMainFragmentLayoutTest.home popular community adapter does not load original image for locked paid post`를 먼저 추가해 focused test가 `HomeMainFragmentLayoutTest.kt:1032` assertion 실패로 RED가 됨을 확인했다. `HomePopularCommunityAdapter` 최소 수정 후 동일 focused test는 BUILD SUCCESSFUL로 GREEN 전환됐고, 후속으로 `HomeMainFragmentLayoutTest` 전체, `:app:compileDebugKotlin`, `:app:ktlintCheck`, `git diff --check`가 모두 성공했다.
|
||||
- 2026-07-30: 사용자 인터뷰에서 `HomeActiveCreatorItem.creatorId`는 서버가 항상 양수로 제공하는 필수 `Long` 필드로 확정했다. 현재 `CreatorActivityType.Live` route가 명시적으로 `null`을 반환해 터치 액션이 종료되는 것을 코드로 확인했으며, `targetId != null`이면 기존 `LiveActionCoordinator.enterLiveRoom(targetId)`, `targetId == null && creatorId > 0L`이면 기존 `CreatorActionCommand.Profile(creatorId)`를 사용하도록 요구사항을 확정했다. 서버 버그 등으로 `creatorId <= 0L`이면 이동하지 않는 방어 검증을 포함한다. 공통 라이브 진입을 재사용해 비로그인·본인인증·성인 콘텐츠 보기 설정 정책을 그대로 적용하고, 이번 범위에서는 해당 공통 정책 자체를 변경하지 않는다. PRD 변경 후 placeholder·모순·모호성·범위를 자체 검토하고 `git diff --check`와 `./gradlew tasks --all`을 실행했으며 모두 성공했다.
|
||||
- 2026-07-10: 사용자 요청에 따라 `방금 활동한 크리에이터` 섹션의 `activityType == COMMUNITY` 클릭과 `인기 커뮤니티` 섹션 item 클릭을 커뮤니티 전체 목록이 아니라 `CreatorChannelCommunityDetailActivity`로 이동하도록 요구사항과 구현을 반영했다. 최근 활동 COMMUNITY의 `targetId`는 커뮤니티 게시글 `postId`로 해석하고, 인기 커뮤니티는 `HomePopularCommunityPostItem.postId`를 상세 화면 식별 값으로 사용한다.
|
||||
- 2026-06-29: 사용자 추가 요청에 따라 `최근 데뷔한 크리에이터` item을 기존 `205dp x 259dp` 비율로 축소한 `185dp x 234dp`로 표시하고, 이미지 단독이 아니라 item root 전체에 `14dp` rounded clipping을 적용해야 한다는 요구사항을 PRD에 반영했다. Figma `24:5534`, `24:5537` design context와 screenshot을 확인했다.
|
||||
@@ -467,3 +495,15 @@ HomeRecommendation 화면
|
||||
- 서버 버그 등으로 `creatorId <= 0L`이면 route를 만들지 않고 이동하지 않는다.
|
||||
- 공통 라이브 진입 흐름을 재사용해 비로그인, 본인인증 필요, 성인 콘텐츠 보기 설정 필요 상태를 기존 접근 정책으로 처리한다.
|
||||
- 다른 activity type의 기존 라우팅과 공통 접근 정책 자체는 변경하지 않는다.
|
||||
|
||||
### 2026-07-31 변경: 모두 팔로우 확인 절차
|
||||
- 여러 크리에이터를 한 번에 팔로우하는 모든 `모두 팔로우` 동작은 API 호출 전에 기존 `V2ModalDialog` 확인창을 표시한다.
|
||||
- 공통 정책의 현재 구현 대상은 실제 노출 중인 `최근 응원이 많은 크리에이터` 섹션이며, 숨겨진 `genreCreators` 섹션은 구현 범위에 포함하지 않는다.
|
||||
- 최초 버튼 터치와 취소에서는 API를 호출하지 않고, 확인창의 `팔로우 하기`를 터치한 경우에만 기존 `creatorIds`와 API 계약으로 요청한다.
|
||||
- Dialog 문구는 한국어·영어·일본어 string resource로 제공하며, API·로딩·성공·실패·완료 버튼 상태 계약은 변경하지 않는다.
|
||||
- 이번 요청에서는 PRD와 구현 계획/TASK 문서만 보완하고 production·test·resource 구현은 진행하지 않는다.
|
||||
|
||||
### 2026-07-31 변경: 인기 커뮤니티 유료 미구매 원본 이미지 미로드 복구
|
||||
- 유료 미구매 인기 커뮤니티 item은 원본 `imageUrl`을 image loader에 전달하지 않는다.
|
||||
- 기존 Coil 요청과 drawable을 비우는 방식으로 원본 네트워크 요청/cache 노출을 막고, `FeedCommunityView.bind()`의 lock overlay와 가격 capsule 표시는 유지한다.
|
||||
- 무료 또는 구매 완료 item의 이미지 로딩, 커뮤니티 상세 이동, 구매 권한 판정, API/DTO 계약은 변경하지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user