fix(creator): 커뮤니티 반응 순서를 조정한다

This commit is contained in:
Yu Sung
2026-07-12 08:33:13 +09:00
parent 47fe0e787d
commit eaed309a1d
14 changed files with 86 additions and 54 deletions

View File

@@ -181,6 +181,7 @@
- 생성: `SodaLive/Sources/V2/CreatorChannel/Community/Detail/Components/CreatorChannelCommunityPostDetailContentView.swift`
- 작업 내용:
- Figma 기준으로 작성자 프로필, 닉네임, 상대 시간, 본문, 이미지/잠금/오디오 영역, 좋아요/댓글 reaction을 표시한다.
- 반응 정보는 댓글 icon/count를 먼저, 좋아요 icon/count를 뒤에 표시한다.
- 유료 미구매 상태는 `price > 0 && existOrdered == false && isOwnPost == false`로 판정한다.
- 유료 미구매 상태에서는 `gray800` 계열 이미지 영역, 잠금 아이콘, 캐시 가격 capsule을 표시한다.
- 구매 완료 상태는 `구매완료` capsule tag를 표시한다.
@@ -212,6 +213,7 @@
- 작업 내용:
- section header는 `댓글 {commentCount}`를 표시한다.
- 댓글 목록은 `LazyVStack`으로 표시하고 마지막 댓글 `onAppear`에서 다음 페이지 조회를 요청한다.
- 댓글 row 사이에는 Figma 기준 `gray800` 1pt separator를 표시한다.
- 댓글이 비어 있으면 header만 유지하거나 Figma 기준 빈 목록 영역을 유지한다.
- 선택된 댓글의 popup은 기존 `CreatorChannelActionPopup` 또는 `CreatorChannelReplyDetailActionPopup` 기반으로 수정/삭제 action을 표시한다.
- 검증 기준:
@@ -238,6 +240,7 @@
- 생성: `SodaLive/Sources/V2/CreatorChannel/Community/Detail/CreatorChannelCommunityPostDetailView.swift`
- 작업 내용:
- `CreatorChannelReplyDetailTitleBar`를 재사용해 back-only title bar를 표시한다.
- 댓글 가능 상세에서는 게시글 영역과 댓글 목록 사이에 Figma 기준 `gray800` 1pt separator를 표시한다.
- `ScrollView` 안에 게시글 콘텐츠와 댓글 목록을 배치한다.
- `isCommentAvailable == true`일 때만 하단 입력 바를 `safeAreaInset(edge: .bottom)`으로 고정한다.
- loading, toast, 삭제 confirm modal을 연결한다.

View File

@@ -145,6 +145,7 @@ data class CreatorChannelCommunityRepliesResponse(
- 배경은 `Color.black`을 사용한다.
- 상단 title bar는 Figma처럼 title text 없이 back chevron만 표시한다.
- 게시글 영역은 작성자 프로필, 닉네임, 상대 시간, 본문, 이미지/오디오/잠금 영역, 좋아요/댓글 count를 표시한다.
- 댓글 가능 상세에서는 게시글 영역과 댓글 목록 사이에 Figma 기준 `gray800` 1pt separator를 표시한다.
- `createdAtUtc`는 기존 `DateParser.relativeTimeText(fromUTC:fallback:now:)` 계열 helper로 상대 시간으로 표시한다.
- `price > 0 && existOrdered == false && isOwnPost == false`이면 유료 미구매 잠금 상태로 표시한다.
- 유료 미구매 잠금 상태는 Figma처럼 `gray800` 계열 이미지 영역, 잠금 아이콘, 캐시 가격 capsule을 표시한다.
@@ -157,6 +158,7 @@ data class CreatorChannelCommunityRepliesResponse(
- `isLiked == true`이면 `ic_feed_community_heart_fill`을 표시한다.
- `isLiked == false`이면 `ic_feed_community_heart`를 표시한다.
- 하트 tap 시 기존 `CreatorCommunityRepository.communityPostLike(postId:)`를 호출한다.
- 반응 정보는 Figma 기준으로 댓글 icon/count를 먼저, 좋아요 icon/count를 뒤에 표시한다.
- 좋아요 tap 직후 UI는 기존 `CreatorChannelCommunityListItem`처럼 local optimistic state로 반영하고, API 실패 시 toast를 표시한 뒤 tap 직전의 `isLiked`, `likeCount` 값으로 local state를 복구한다.
- `isCommentAvailable == true`이면 댓글 icon과 `commentCount`를 표시한다.
- `isCommentAvailable == false`이면 댓글 icon/count, 댓글 목록, 하단 입력 바를 모두 숨긴다.
@@ -164,6 +166,7 @@ data class CreatorChannelCommunityRepliesResponse(
### 7.5 Comments
- 상세 API 응답의 `comments.comments`를 초기 댓글 목록으로 표시한다.
- 댓글 section header는 Figma처럼 `댓글 {commentCount}` 형식으로 표시한다.
- 댓글 row 사이에는 Figma 기준 `gray800` 1pt separator를 표시한다.
- 댓글 row는 작성자 프로필, 닉네임, 상대 시간, 본문, 우측 더보기 버튼을 표시한다.
- `writerId`로 내 댓글/답글 여부를 판정하고, 게시글의 `creatorId`로 현재 사용자가 해당 커뮤니티 게시글을 쓴 크리에이터인지 판정한다.
- 댓글/답글 popup menu는 기존 커뮤니티 댓글과 동일하게 내 댓글/답글이면 `수정하기`, `삭제하기`를 표시하고, 해당 게시글을 쓴 크리에이터이면 내가 쓴 댓글/답글이 아니어도 `삭제하기`를 표시한다.