docs(creator): 커뮤니티 후속 작업 기록을 갱신한다
This commit is contained in:
@@ -11,6 +11,10 @@
|
||||
- 사용자는 게시글에 좋아요를 누르고, 댓글과 답글을 작성/수정/삭제하고 싶어 한다.
|
||||
- 댓글 작성이 불가능한 게시글에서는 댓글 영역과 입력 영역이 노출되면 안 된다.
|
||||
- 조회용 신규 v2 API 계약과 Figma 기반 UI 요구사항이 별도 문서로 정의되어야 한다.
|
||||
- 2026-08-10 후속 확인에서 홈 커뮤니티 섹션의 유료 미구매 게시글에 하트·댓글 UI가 노출되고, 홈 Response에 고정/댓글 가능 여부가 없어 커뮤니티 탭·상세와 표시 상태가 달라지는 문제가 확인됐다.
|
||||
- 커뮤니티 탭의 유료 미구매 가격 UI와 구매 진입점이 홈·상세와 일치하지 않고, 상세 구매 결과가 커뮤니티 탭에만 반영되어 홈 섹션은 구매 전 상태로 남는다.
|
||||
- 게시글 관리/신고 메뉴가 상세에 없고 목록 item에 별도 액션이 남아 있어, 목록은 상세 이동만 담당하고 구매·관리 액션은 상세에 모으는 정리가 필요하다.
|
||||
- 2026-08-10 구현 확인 후 상세에만 둔 권한별 더보기 메뉴를 홈 커뮤니티 item과 커뮤니티 탭 리스트형에서도 바로 사용할 수 있어야 한다는 후속 요구가 확정됐다.
|
||||
|
||||
---
|
||||
|
||||
@@ -34,6 +38,11 @@
|
||||
- 하트 터치 시 좋아요 API를 호출하고, `isLiked`에 따라 `ic_feed_community_heart_fill`/`ic_feed_community_heart` icon을 표시한다.
|
||||
- 댓글 작성이 불가능한 게시글(`isCommentAvailable == false`)이면 댓글 목록과 하단 입력 영역을 숨긴다.
|
||||
- 하단 댓글/답글 입력 영역은 화면 하단에 고정하고 키보드 표시 여부에 따라 함께 올라오게 한다.
|
||||
- 크리에이터 채널 홈 Response의 커뮤니티 게시글에 `isPinned`, `isCommentAvailable`을 추가하고 홈 섹션의 고정·댓글 표시 상태에 반영한다.
|
||||
- 홈과 커뮤니티 탭의 게시글 card 본문 터치는 상세 이동만 수행하고, 별도 더보기 버튼은 권한별 관리/신고 메뉴를 제공한다. 유료 게시글 구매는 상세에서만 시작한다.
|
||||
- 커뮤니티 탭 리스트형·썸네일형의 유료 미구매 가격 UI를 홈·상세와 같은 잠금/가격 표현으로 통일한다.
|
||||
- 상세·홈·커뮤니티 리스트형 게시글 작성자 영역 우측 끝에 `ic_seemore_vertical` 버튼을 표시하고 작성자/구매 권한에 따라 관리 또는 신고 메뉴를 제공한다.
|
||||
- 상세 구매·수정·삭제·고정 결과가 크리에이터 채널 홈과 커뮤니티 탭에 모두 반영되도록 결과 전파 범위를 확장한다.
|
||||
|
||||
---
|
||||
|
||||
@@ -45,6 +54,8 @@
|
||||
- 레거시 커뮤니티/댓글 관련 파일을 직접 수정하지 않는다.
|
||||
- 크리에이터 채널의 다른 탭 UI나 공통 스크롤 구조를 재설계하지 않는다.
|
||||
- v2 패키지 내부 popup dialog는 `kr.co.vividnext.sodalive.v2.components.modal.V2ModalDialog`를 사용한다.
|
||||
- 레거시 커뮤니티 게시글 목록의 구매 동작을 변경하지 않는다.
|
||||
- 커뮤니티 게시글 화면 공통화를 위한 신규 framework, coordinator 또는 범용 abstraction을 추가하지 않는다.
|
||||
|
||||
---
|
||||
|
||||
@@ -64,11 +75,96 @@
|
||||
- 사용자는 내가 쓴 댓글/답글을 수정하거나 삭제하고 싶다.
|
||||
- 채널 크리에이터는 자신의 채널 댓글/답글을 삭제해 관리하고 싶다.
|
||||
- 사용자는 댓글이 불가능한 게시글에서는 입력창 없이 게시글만 보고 싶다.
|
||||
- 사용자는 홈과 커뮤니티 탭에서 게시글을 터치하면 다른 중간 동작 없이 상세로 이동하고 싶다.
|
||||
- 사용자는 미구매 유료 게시글의 하트·댓글 정보를 홈에서 보지 않고 상세에서 구매하고 싶다.
|
||||
- 사용자는 고정 게시글을 홈 커뮤니티 섹션에서도 구분하고 싶다.
|
||||
- 작성자는 상세에서 자신의 게시글을 수정·삭제·고정/고정 해제하고 싶다.
|
||||
- 일반 사용자는 무료 또는 구매 완료 게시글 상세에서 게시글을 신고하고 싶다.
|
||||
- 작성자는 홈 또는 커뮤니티 리스트에서 자신의 게시글을 수정·삭제·고정/고정 해제하고 싶다.
|
||||
- 일반 사용자는 홈 또는 커뮤니티 리스트의 무료·구매 완료 게시글을 신고하고 싶다.
|
||||
|
||||
---
|
||||
|
||||
## 7. Core Features
|
||||
|
||||
### F0-20260810. 구매 진입점·표시 상태·권한별 메뉴 후속 정리
|
||||
홈·커뮤니티 탭은 게시글 상태를 일관되게 표시하고 card 본문에서 상세로 이동한다. 구매는 상세에서만 수행하며, 권한별 게시글 관리/신고 메뉴는 상세·홈·커뮤니티 리스트형에서 제공한다.
|
||||
|
||||
#### Home Response Contract
|
||||
크리에이터 채널 홈의 `communities`와 `notices`가 사용하는 게시글 Response에 상세와 같은 필드를 추가한다.
|
||||
|
||||
```kotlin
|
||||
data class CreatorChannelCommunityPostResponse(
|
||||
// 기존 필드 유지
|
||||
@SerializedName("isPinned") val isPinned: Boolean,
|
||||
@SerializedName("isCommentAvailable") val isCommentAvailable: Boolean
|
||||
)
|
||||
```
|
||||
|
||||
#### Home Community Requirements
|
||||
- `isPinned == true`이면 커뮤니티 탭과 같은 고정/공지 표시를 노출한다.
|
||||
- `price > 0 && existOrdered == false`인 유료 미구매 게시글은 하트 icon·좋아요 수·댓글 icon·댓글 수 reaction UI 전체를 숨긴다.
|
||||
- 무료 또는 구매 완료 게시글은 하트 icon과 좋아요 수를 표시한다.
|
||||
- 무료 또는 구매 완료 게시글에서 `isCommentAvailable == true`이면 댓글 icon과 댓글 수를 표시하고, `false`이면 댓글 icon과 댓글 수만 숨긴다.
|
||||
- 게시글 card 본문 터치 액션은 상세 이동만 제공한다.
|
||||
- 홈 커뮤니티 item에서 구매 dialog와 오디오 재생은 시작하지 않는다.
|
||||
- 권한 조건을 만족하는 홈 커뮤니티 item은 작성자 영역 우측 끝의 더보기 버튼으로 관리/신고 메뉴를 시작한다.
|
||||
|
||||
#### Community Tab Requirements
|
||||
- 리스트형과 썸네일형 card 본문 터치 액션은 상세 이동만 제공한다.
|
||||
- 리스트형 item의 오디오 재생은 제거 상태를 유지하고, 권한 조건을 만족하는 item의 작성자 영역 우측 끝에는 더보기 버튼을 제공한다.
|
||||
- 썸네일형(그리드형)은 작성자 영역이 없으므로 더보기 버튼을 제공하지 않고 상세 이동만 유지한다.
|
||||
- 유료 미구매 게시글 item에서는 구매 dialog를 열지 않는다.
|
||||
- 리스트형과 썸네일형의 유료 미구매 가격 UI를 홈/상세와 같은 `lock icon + cash icon + 금액 capsule` 구조로 통일한다.
|
||||
- 리스트형·썸네일형의 기존 reaction 숨김, 댓글 가능 여부, 고정 표시 정책은 유지한다.
|
||||
|
||||
#### Detail Purchase and Badge Requirements
|
||||
- 유료 미구매 게시글의 paywall을 터치한 경우에만 기존 `PurchaseCommunityPostDialog`를 표시한다.
|
||||
- 상세 작성자 영역 우측 상단에 표시하던 유료 금액 badge를 제거한다.
|
||||
- 유료 구매 완료 시 표시하던 구매 완료 badge를 제거한다.
|
||||
- paywall 내부의 잠금/가격 표시는 구매 전 구매 진입점이므로 유지한다.
|
||||
- 구매 성공 시 상세를 다시 조회하고 상위 화면에 변경 결과를 반환한다.
|
||||
- 구매 실패 시 잠금 상태를 유지하고 기존 오류 Toast 정책을 따른다.
|
||||
|
||||
#### Detail More Menu Requirements
|
||||
- `ic_seemore_vertical` 버튼은 title bar가 아니라 게시글 작성자 영역의 우측 끝에 표시한다.
|
||||
- 작성자는 무료/유료 및 구매 여부와 관계없이 더보기 버튼을 표시한다.
|
||||
- 일반 사용자는 무료 게시글 또는 구매 완료 유료 게시글에서 더보기 버튼을 표시한다.
|
||||
- 일반 사용자의 유료 미구매 게시글에서는 더보기 버튼을 숨긴다.
|
||||
- 작성자 메뉴는 기존 `CreatorCommunityPostMenuBottomSheetDialog`를 재사용해 수정, 삭제, 고정/고정 해제를 제공한다.
|
||||
- 일반 사용자 메뉴는 같은 BottomSheet의 신고 메뉴를 제공하고 기존 `CreatorCommunityReportDialog`를 재사용한다.
|
||||
- 수정은 기존 `CreatorCommunityModifyActivity`, 삭제/고정은 기존 `CreatorCommunityRepository` API를 호출한다.
|
||||
- 신고는 기존 `ReportType.COMMUNITY_POST` 흐름을 재사용한다.
|
||||
|
||||
#### Home and Community List More Menu Requirements
|
||||
- 홈 커뮤니티 item과 커뮤니티 탭 리스트형 item의 작성자 영역 우측 끝에 `ic_seemore_vertical` 버튼을 표시한다.
|
||||
- 작성자 판정은 게시글 `creatorId == SharedPreferenceManager.userId`로 통일한다.
|
||||
- 작성자는 무료/유료 및 구매 여부와 관계없이 더보기 버튼을 표시한다.
|
||||
- 일반 사용자는 무료 게시글 또는 구매 완료 유료 게시글에서 더보기 버튼을 표시한다.
|
||||
- 일반 사용자의 유료 미구매 게시글에서는 더보기 버튼을 숨긴다.
|
||||
- 작성자 메뉴는 기존 `CreatorCommunityPostMenuBottomSheetDialog`를 재사용해 수정, 삭제, 고정/고정 해제를 제공한다.
|
||||
- 일반 사용자 메뉴는 같은 BottomSheet의 신고 메뉴를 제공하고 기존 `CreatorCommunityReportDialog`를 재사용한다.
|
||||
- 수정은 기존 `CreatorCommunityModifyActivity`, 삭제/고정은 기존 `CreatorCommunityRepository`, 신고는 기존 `ReportType.COMMUNITY_POST` 흐름을 재사용한다.
|
||||
- 더보기 버튼 터치는 card의 상세 이동 click으로 전파하지 않고 메뉴만 표시한다.
|
||||
- 커뮤니티 탭 썸네일형(그리드형)은 이번 후속 범위에서 제외한다.
|
||||
|
||||
#### Change Propagation Requirements
|
||||
- 구매·수정·삭제·고정/고정 해제 성공 시 상세는 `RESULT_OK`를 반환한다.
|
||||
- 수정 복귀와 고정/고정 해제 성공 시 상세를 다시 조회한다.
|
||||
- 삭제 성공 시 `RESULT_OK`를 설정하고 상세를 종료한다.
|
||||
- `CreatorChannelActivity`가 상세의 `RESULT_OK`를 받으면 홈 탭과 커뮤니티 탭을 모두 새로고침한다.
|
||||
- 홈·커뮤니티 리스트 메뉴의 수정·삭제·고정/고정 해제 성공도 홈 탭과 커뮤니티 탭을 모두 새로고침한다.
|
||||
- 신고 결과는 게시글 구매/내용/고정 상태를 바꾸지 않으므로 홈·커뮤니티 탭 새로고침을 발생시키지 않는다.
|
||||
|
||||
#### Edge Cases
|
||||
- 작성자 응답의 `existOrdered == false`는 작성자의 관리 권한을 제한하지 않는다.
|
||||
- 서버가 유료 미구매 홈 item에 reaction count를 내려줘도 UI에는 표시하지 않는다.
|
||||
- `isCommentAvailable == false`인 무료/구매 완료 홈 item은 좋아요만 표시하고 댓글 UI는 숨긴다.
|
||||
- 상세 메뉴 mutation이 실패하면 상세 상태를 임의 변경하거나 성공 결과를 반환하지 않는다.
|
||||
- 홈·커뮤니티 리스트 메뉴 mutation이 실패하면 현재 목록 상태를 임의 변경하거나 성공 새로고침을 실행하지 않는다.
|
||||
- 더보기 버튼이 숨겨진 유료 미구매 일반 사용자 item은 card 본문 상세 이동만 가능하다.
|
||||
- 다른 화면에서 사용하는 `FeedItem.Community`는 신규 필드 기본값으로 기존 표시 동작을 유지한다.
|
||||
|
||||
### F0. 2026-07-12 후속 변경사항
|
||||
크리에이터 커뮤니티 상세의 오디오/구매 동작을 기존 레거시 목록 UI와 동일한 사용성으로 보정한다.
|
||||
|
||||
@@ -107,7 +203,7 @@ Figma `290:9243`, `290:9266` 기준으로 게시글 본문과 좋아요를 표
|
||||
- 본문(`content`), 이미지(`imageUrl`), 오디오(`audioUrl`)를 표시한다.
|
||||
- 오디오 재생은 기존 `CreatorCommunityMediaPlayerManager`를 재사용한다.
|
||||
- 유료 게시글(`price > 0`)이고 미구매(`existOrdered == false`)이면 Figma paywall(잠금 + 가격) 표시를 따른다.
|
||||
- 유료 게시글을 구매한 경우(`existOrdered == true`) Figma 기준 `구매완료` badge를 표시한다.
|
||||
- 유료 게시글 구매 완료 badge는 2026-08-10 후속 요구사항에 따라 표시하지 않는다.
|
||||
- 하트 터치 시 좋아요 API(`communityPostLike(postId)`)를 호출한다.
|
||||
- `isLiked == true`이면 `ic_feed_community_heart_fill`, `false`이면 `ic_feed_community_heart`를 표시한다.
|
||||
- 좋아요 수(`likeCount`)를 하트 옆에 표시한다.
|
||||
@@ -211,6 +307,9 @@ Figma `290:9266` 기준으로 댓글 불가 상태를 처리한다.
|
||||
|
||||
## 8. UX / UI Expectations
|
||||
- 게시글 item 터치부터 상세 진입까지 자연스럽게 이어진다.
|
||||
- 홈과 커뮤니티 탭의 게시글 card 본문은 상세 이동만 수행하고, 별도 더보기 버튼은 권한별 관리/신고 메뉴만 제공한다. 구매·재생은 제공하지 않는다.
|
||||
- 홈·커뮤니티 탭 리스트형·썸네일형·상세의 유료 미구매 가격은 동일한 잠금/가격 capsule 구조로 표시한다.
|
||||
- 상세·홈·커뮤니티 리스트형 `ic_seemore_vertical` 버튼은 게시글 작성자 영역 우측 끝에 정렬하고 닉네임·작성 시간과 겹치지 않게 한다.
|
||||
- 커뮤니티 상세 상단 게시글 영역은 목록 카드처럼 rounded 배경을 깔지 않고, 게시글과 댓글 영역 및 댓글 사이에는 Figma `290:9243` 기준 1dp border를 표시한다.
|
||||
- 하트 상태와 좋아요 수는 터치 즉시 반응한다(낙관적 업데이트 후 실패 시 롤백).
|
||||
- 입력 영역은 키보드 있음/없음 상태를 기준으로 자연스럽게 대응한다.
|
||||
@@ -229,18 +328,30 @@ Figma `290:9266` 기준으로 댓글 불가 상태를 처리한다.
|
||||
- 커뮤니티 댓글/답글 신고는 현재 전용 신고 API/레거시 흐름이 없어 이번 구현 범위에서 제외하고, 기존 레거시 메뉴2의 실제 동작인 채널 크리에이터 삭제만 재사용한다.
|
||||
- 신규 문자열은 `values`, `values-en`, `values-ja`에 추가하거나 기존 문자열을 재사용한다.
|
||||
- 오디오 재생은 기존 `CreatorCommunityMediaPlayerManager`를 재사용한다.
|
||||
- 홈 커뮤니티 표시는 기존 `FeedCommunityView`와 `FeedItem.Community`를 기본값 기반으로 최소 확장하며 다른 feed 호출부의 기존 동작을 유지한다.
|
||||
- 상세·홈·커뮤니티 리스트형 게시글 메뉴는 기존 `CreatorCommunityPostMenuBottomSheetDialog`, `CreatorCommunityReportDialog`, `CreatorCommunityModifyActivity`, `CreatorCommunityRepository`를 호출해 사용하고 레거시 파일은 수정하지 않는다.
|
||||
- 홈·커뮤니티 리스트형 메뉴 실행과 mutation은 `CreatorChannelActivity`의 공용 처리 흐름을 사용하고 화면별 중복 mutation 구현이나 신규 범용 coordinator를 추가하지 않는다.
|
||||
- UI 자동 테스트는 Response/mapper/presentation/routing/result 전파 로직만 검증하고 View 크기·간격·constraint·visibility 속성을 직접 검증하지 않는다.
|
||||
|
||||
---
|
||||
|
||||
## 10. Metrics
|
||||
- 별도 분석 이벤트 추가는 이번 범위에서 정의하지 않는다.
|
||||
- 기능 성공 기준은 게시글 상세 진입, 댓글/답글 조회, 좋아요/댓글/답글 작성·수정·삭제가 정상 동작하고 목록에 반영되는 것이다.
|
||||
- 2026-08-10 후속 성공 기준은 홈 Response 신규 필드가 고정/댓글 UI에 반영되고, 미구매 유료 홈 item reaction이 숨겨지며, card 본문은 상세 이동만 수행하고 권한별 더보기 메뉴가 상세·홈·커뮤니티 리스트형에 표시되며, 구매·메뉴 결과가 홈과 커뮤니티 탭에 반영되는 것이다.
|
||||
- UI 완료 기준은 Figma `290:9243`, `290:9266`, `669:40462`, `669:40468`의 주요 layout 구조, 하트/전송 버튼 상태, 댓글 불가 처리, 입력 영역 동작이 구현 화면에 반영되었는지 확인되는 것이다.
|
||||
- 자동 검증 기준은 조회 API 계약(page/size 기본값, 응답 매핑), 하트 icon/전송 버튼 상태 계약, 댓글 불가 게시글의 댓글/입력 영역 숨김 계약을 source/resource/ViewModel 테스트로 확인하는 것이다.
|
||||
- 자동 검증 기준은 조회 API 계약(page/size 기본값, 응답 매핑), 하트 icon/전송 버튼 상태 계약, 댓글 불가 게시글의 댓글/입력 영역 숨김 계약과 홈 신규 Response 필드, 잠금·댓글·핀 표시 조건, 상세·홈·커뮤니티 리스트형 더보기 권한, 결과 전파를 local unit test로 확인하는 것이다.
|
||||
|
||||
---
|
||||
|
||||
## 11. Open Questions & Decisions
|
||||
- 결정(2026-08-10, 목록 더보기 후속): 상세와 동일한 권한별 더보기 메뉴를 홈 커뮤니티 item과 커뮤니티 탭 리스트형에 적용한다. 작성자 영역이 없는 커뮤니티 그리드형은 제외한다.
|
||||
- 결정(2026-08-10, 목록 click): card 본문은 상세 이동, 더보기 버튼은 메뉴 표시로 분리하며 더보기 touch는 상세 이동으로 전파하지 않는다.
|
||||
- 결정(2026-08-10, 구현 구조): 홈·커뮤니티 리스트형은 `CreatorChannelActivity`의 공용 메뉴/mutation 흐름을 사용하고 기존 상세 메뉴 구현은 유지한다.
|
||||
- 결정(2026-08-10, 더보기 권한): 작성자는 구매 여부와 관계없이 관리 메뉴를 표시하고, 일반 사용자는 무료 또는 구매 완료 게시글에서만 신고 메뉴를 표시한다.
|
||||
- 결정(2026-08-10, 가격 UI): 커뮤니티 탭 리스트형과 썸네일형 모두 홈/상세의 잠금/가격 capsule 표현을 따른다.
|
||||
- 결정(2026-08-10, 홈 고정 표시): 홈 Response의 `isPinned`를 홈 커뮤니티 item 고정 표시에 사용한다.
|
||||
- 결정(2026-08-10, 문서 연속성): 상세 구매 후속 요구사항을 포함하는 기존 문서에 이번 홈/탭/상세 정리 범위를 이어서 기록한다.
|
||||
- 결정(재사용 vs 복사): 답글 목록 화면 UI는 팬Talk 상세와 동일하지만 조회 API가 다르고, 현재 팬Talk 상세 화면은 v2에 미구현이다. 따라서 이번 범위에서는 **커뮤니티 전용 답글 화면으로 신규 구현하되, layout XML과 댓글/답글 item view(ViewHolder)만 데이터/콜백 주입형으로 설계해 재사용 가능하게 둔다.** ViewModel/Repository/데이터 모델/화면 컨트롤러는 커뮤니티 전용으로 분리한다.
|
||||
- 근거: 아직 팬Talk 상세라는 두 번째 사용처가 없어 지금 데이터 계층까지 공통 추상화하면 단일 사용처를 위한 추측성 추상화가 된다. UI 리소스/item view만 공용화하면 추후 팬Talk 상세 구현 시 동일 UI를 그대로 재사용할 수 있다.
|
||||
- 남은 확인: 없음.
|
||||
|
||||
Reference in New Issue
Block a user