Skip to content

Conversation

@rbqks529
Copy link
Collaborator

@rbqks529 rbqks529 commented Oct 30, 2025

➕ 이슈 링크


🔎 작업 내용

  • 추천 피드 UI 및 캐러셀 부분 구현 완료
  • viewModel에 함수 구현완료 및 화면에 연결 완료

📸 스크린샷

스크린샷 2025-10-30 오후 4 29 41
2025-10-30.4.29.57.mov

😢 해결하지 못한 과제

  • [] TASK


📢 리뷰어들에게

  • API만 완성되고 서비스, 레포지토리만 구현하면 됩니다.

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능

    • 피드 화면에 추천 콘텐츠 캐러셀 섹션 추가
    • 추천 피드 카드 컴포넌트 도입
  • 스타일

    • 액션 버튼 배경색 업데이트
    • 텍스트 오버플로우 지시자 추가
  • 개선사항

    • 피드 카드의 텍스트 자르기 로직 개선으로 더 정확한 표시 제공

@coderabbitai
Copy link

coderabbitai bot commented Oct 30, 2025

개요

피드 화면에 추천 글 카루셀 섹션을 추가하여 UI 컴포넌트와 상태 관리를 구현합니다. 새로운 RecommendFeedCard, RecommendFeedCardSection 컴포넌트를 생성하고, FeedScreen에 10번째 항목 이후에 카루셀을 통합하며, FeedViewModel에 추천 글 상태를 추가합니다.

변경 사항

코호트 / 파일 요약
UI 컴포넌트 - 추천 글 카드
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt
프로필 헤더, 액션 북 섹션, 텍스트 내용(최대 3줄 + 더보기 표시), 옵션 이미지 썸네일(최대 3개), 액션 바를 포함한 새로운 추천 글 카드 컴포넌트 추가
UI 컴포넌트 - 추천 글 카루셀
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt
가로 스크롤 카루셀 표시 컴포넌트 추가: 단일 항목 시 중앙 정렬, 다중 항목 시 HorizontalPager 사용
버튼 스타일링
app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt
배경색을 DarkGrey02에서 DarkGrey로 변경하여 색상 테마 업데이트
피드 화면 통합
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt
RecommendedFeedCarousel 임포트 및 10번째 항목 이후에 추천 글 카루셀 섹션 통합, 레이아웃 흐름 개선
상태 관리
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt
FeedUiState에 recommendedFeeds 필드 추가, loadRecommendedFeeds() 함수 구현, 초기화 시 호출
텍스트 절단 로직
app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt
isTextTruncated 상태 추가, Text의 onTextLayout 콜백을 통한 실시간 절단 감지 개선
리소스
app/src/main/res/drawable/ic_text_more_darkgrey.xml, app/src/main/res/values/strings.xml
새로운 드로어블 리소스(ic_text_more_darkgrey.xml)와 문자열 리소스(recommended_feeds_title, recommended_feeds_subtitle) 추가

시퀀스 다이어그램

sequenceDiagram
    participant FeedScreen
    participant FeedViewModel
    participant RecommendFeedCarousel
    participant RecommendFeedCard

    FeedScreen->>FeedViewModel: 초기화 시 FeedUiState 구독
    FeedViewModel->>FeedViewModel: loadRecommendedFeeds() 호출
    FeedViewModel->>FeedScreen: recommendedFeeds 업데이트 (UiState)
    
    FeedScreen->>FeedScreen: 10번째 항목 이후 카루셀 렌더링 위치 확인
    alt recommendedFeeds가 비어있지 않음
        FeedScreen->>RecommendFeedCarousel: 추천 글 리스트 & onFeedClick 콜백 전달
        RecommendFeedCarousel->>RecommendFeedCarousel: 리스트 크기에 따라 분기
        alt 단일 항목
            RecommendFeedCarousel->>RecommendFeedCard: 중앙 정렬하여 표시
        else 다중 항목
            RecommendFeedCarousel->>RecommendFeedCard: HorizontalPager로 각 페이지 렌더링
        end
        RecommendFeedCard->>RecommendFeedCard: 클릭 시 feedId 추출
        RecommendFeedCard->>RecommendFeedCarousel: onClick 콜백 실행
        RecommendFeedCarousel->>FeedScreen: onFeedClick(feedId) 호출
    end
Loading

예상 검토 난이도

🎯 3 (중간) | ⏱️ ~25분

추가 주의 사항:

  • RecommendFeedCardSection.kt: HorizontalPager 상태 관리 및 페이징 로직 검증 필요
  • FeedScreen.kt: 레이아웃 흐름 변경으로 인한 스페이싱/디바이더 렌더링 순서 확인
  • SavedFeedCard.kt: onTextLayout 콜백을 통한 truncation 감지 로직이 정확히 동작하는지 확인
  • FeedViewModel.kt: loadRecommendedFeeds() 함수가 현재 플레이스홀더 상태이므로, 추후 API 연결 시 상태 관리 검증 필요

관련 가능성 있는 PR

추천 레이블

✨ feat

추천 검토자

  • Nico1eKim
  • JJUYAAA

토끼의 시

🐰 추천 글 카루셀이 둥실둥실,
열 번째 카드 지나 반짝반짝.
프로필과 더보기, 이미지까지 담아,
가로 스크롤로 독자들 맘을 사로잡네! ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.69% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Title Check ✅ Passed PR 제목 "[UI] 추천 피드 부분 UI 구현"은 주요 변경 사항을 명확하고 구체적으로 설명하고 있습니다. 추천 피드 UI 섹션 구현이라는 핵심 내용을 간결하게 전달하고 있으며, [UI] 접두사를 통해 카테고리도 명확히 표시되어 있습니다. 변경 사항의 중심인 추천 피드 관련 컴포넌트 및 캐러셀 UI 구현과 직접적으로 연관되어 있습니다.
Linked Issues Check ✅ Passed 연결된 이슈 #149의 두 가지 주요 요구사항이 모두 충족되었습니다. 첫째, 작가 및 인플루언서 글 추천 UI는 RecommendFeedCard, RecommendFeedCardSection 등의 새로운 컴포넌트들을 통해 완벽히 구현되었고, 둘째 ViewModel 및 관련 구조(FeedUiState에 recommendedFeeds 추가, loadRecommendedFeeds() 함수)도 준비되었습니다. FeedScreen 통합을 통해 UI가 실제 화면에 적용되었으며, 새로운 drawable 리소스와 문자열 리소스로 완성도 있는 UI가 구현되었습니다.
Out of Scope Changes Check ✅ Passed 모든 변경 사항이 이슈 #149의 요구사항 범위 내에 있습니다. RecommendFeedCard, RecommendFeedCardSection, FeedScreen 통합은 직접적으로 추천 피드 UI 구현에 필요하고, ActionBookButton 스타일 업데이트, SavedFeedCard 텍스트 처리 개선, 새로운 drawable 및 문자열 리소스는 모두 추천 피드 UI를 지원하는 보조 변경 사항입니다. PR 작성자가 명시한 대로 API 및 서비스/레포지토리 구현은 향후 작업 범위이므로 현재 PR의 범위는 적절합니다.
Description Check ✅ Passed PR 설명은 저장소의 필수 템플릿 구조를 잘 따르고 있습니다. 이슈 링크(#149), 작업 내용(추천 피드 UI 및 캐러셀 구현, ViewModel 연결), 스크린샷(이미지 및 동영상), 해결하지 못한 과제 섹션, 그리고 리뷰어를 위한 안내(API 완성 후 서비스, 레포지토리 구현 필요)가 모두 포함되어 있습니다. 각 섹션이 명확하고 적절하게 작성되었으며, raw_summary의 변경사항과 일치합니다.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (1)

545-551: TODO 주석 확인 - API 연결 필요

현재 loadRecommendedFeeds() 함수가 빈 리스트를 반환하는 플레이스홀더 구현입니다. PR 설명에 따르면 API가 완성되면 서비스와 레포지토리만 구현하면 된다고 하셨는데, API 연결 일정이 확정되어 있나요? 추후 누락되지 않도록 이슈 트래킹을 권장드립니다.

app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (1)

561-579: 추천 캐러셀 통합이 잘 구현되었습니다!

10번째 피드 항목 후에 추천 섹션을 삽입하는 로직이 올바르게 구현되었습니다. 여백과 구분선 처리가 적절하며, 빈 리스트 체크도 포함되어 있습니다.

다만, else 블록의 로직이 약간 복잡할 수 있습니다. 현재는 마지막 항목이 아닐 때만 여백과 구분선을 추가하는데, 추천 섹션이 있는 경우와 없는 경우를 구분하여 가독성을 높일 수 있습니다.

app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (1)

56-63: 텍스트 처리 로직 개선 제안

현재 processedText는 줄바꿈 문자(\n)로 분할하여 3줄만 표시하지만, 이후 onTextLayout에서 실제 시각적 오버플로우를 감지합니다. 이 두 로직이 중복될 수 있습니다.

SavedFeedCard처럼 maxLines 속성만으로 텍스트를 제한하고 onTextLayout으로만 잘림을 감지하는 것이 더 간단하고 일관성 있을 수 있습니다.

예시:

-        // 추천글은 항상 3줄로 고정
-        val processedText = remember(feedItem.contentBody) {
-            val lines = feedItem.contentBody.split("\n")
-            if (lines.size <= maxTextLines) {
-                feedItem.contentBody
-            } else {
-                lines.take(maxTextLines).joinToString("\n")
-            }
-        }
-
         Column(
             modifier = Modifier
                 .fillMaxWidth()
                 .padding(12.dp)
         ) {
             // ... ProfileBar ...
             
             // ... ActionBookButton ...

             Column(
                 modifier = Modifier.clickable { onClick() },
                 verticalArrangement = Arrangement.Center,
                 horizontalAlignment = Alignment.CenterHorizontally
             ) {
                 Box {
                     Text(
-                        text = processedText,
+                        text = feedItem.contentBody,
                         style = typography.feedcopy_r400_s14_h20,
                         color = colors.White,
                         maxLines = maxTextLines,
                         modifier = Modifier.fillMaxWidth(),
                         onTextLayout = { textLayoutResult ->
                             isTextTruncated = textLayoutResult.hasVisualOverflow
                         }
                     )
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Jira integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between f491719 and ee7f338.

📒 Files selected for processing (8)
  • app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (1 hunks)
  • app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (3 hunks)
  • app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (5 hunks)
  • app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (3 hunks)
  • app/src/main/res/drawable/ic_text_more_darkgrey.xml (1 hunks)
  • app/src/main/res/values/strings.xml (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-07-01T07:19:10.981Z
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.

Applied to files:

  • app/src/main/res/values/strings.xml
🧬 Code graph analysis (4)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (2)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (1)
  • RecommendFeedCard (37-154)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
  • ThipTheme (41-69)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (3)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedWriteViewModel.kt (1)
  • updateState (41-43)
app/src/main/java/com/texthip/thip/ui/group/viewmodel/GroupViewModel.kt (1)
  • updateState (30-32)
app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedDetailViewModel.kt (1)
  • updateState (40-42)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (5)
app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt (1)
  • ProfileBar (30-107)
app/src/main/java/com/texthip/thip/utils/color/HexToColor.kt (1)
  • hexToColor (6-13)
app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt (1)
  • ActionBookButton (27-83)
app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBarButton.kt (1)
  • ActionBarButton (24-110)
app/src/main/java/com/texthip/thip/ui/theme/Theme.kt (1)
  • ThipTheme (41-69)
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (3)
app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (1)
  • SavedFeedCard (38-164)
app/src/main/java/com/texthip/thip/utils/color/HexToColor.kt (1)
  • hexToColor (6-13)
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (1)
  • RecommendedFeedCarousel (24-88)
🔇 Additional comments (10)
app/src/main/res/values/strings.xml (1)

459-461: LGTM!

추천 피드 섹션을 위한 문자열 리소스가 잘 정의되었습니다. 네이밍 컨벤션과 형식이 기존 패턴을 잘 따르고 있습니다.

app/src/main/java/com/texthip/thip/ui/common/buttons/ActionBookButton.kt (1)

35-38: LGTM!

배경색을 DarkGrey02에서 DarkGrey로 변경하여 버튼의 시각적 대비를 개선했습니다. 새로운 추천 피드 카드에서도 일관된 스타일이 적용됩니다.

app/src/main/res/drawable/ic_text_more_darkgrey.xml (1)

1-27: LGTM!

텍스트 오버플로우 표시를 위한 벡터 드로어블 리소스가 잘 구현되었습니다. 그라데이션 효과와 "더보기" 글리프가 시각적으로 자연스러운 텍스트 잘림 표시를 제공합니다.

app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (1)

53-127: 텍스트 잘림 감지 로직 개선이 우수합니다!

onTextLayouthasVisualOverflow를 사용하는 새로운 접근 방식이 이전의 단순 줄 수 계산보다 훨씬 정확합니다. 실제 텍스트 렌더링 결과를 기반으로 잘림 여부를 판단하므로 다양한 화면 크기와 폰트 설정에서도 올바르게 동작합니다.

app/src/main/java/com/texthip/thip/ui/feed/viewmodel/FeedViewModel.kt (1)

27-27: LGTM!

추천 피드를 위한 UI 상태 필드가 잘 추가되었습니다. 타입과 초기값이 적절합니다.

app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (1)

519-528: LGTM!

피드 항목 렌더링 로직이 깔끔하게 정리되었습니다. 첫 번째 항목과 이후 항목에 대한 여백 처리가 명확합니다.

app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCard.kt (2)

38-49: LGTM!

추천 피드 카드의 기본 구조가 잘 설계되었습니다. 카드 스타일과 색상이 디자인 시스템과 일관성을 유지합니다.


140-151: ActionBarButton 상호작용 확인

ActionBarButton의 onLikeClickonBookmarkClick이 빈 람다로 설정되어 있어, 개별 액션이 작동하지 않고 카드 전체 클릭만 처리됩니다. 이것이 의도된 동작인지 확인이 필요합니다.

만약 추천 피드에서 좋아요/저장 기능을 개별적으로 제공하지 않는 것이 기획 의도라면 현재 구현이 맞지만, 향후 개별 액션이 필요하다면 콜백을 전달받도록 수정해야 합니다.

app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt (2)

25-30: LGTM!

빈 리스트에 대한 조기 반환 처리가 올바르게 구현되었습니다. 불필요한 렌더링을 방지합니다.


54-86: 단일/다중 아이템 처리 로직이 우수합니다!

카드가 1개일 때와 여러 개일 때를 구분하여 처리하는 로직이 좋습니다. 단일 아이템의 경우 중앙 정렬, 다중 아이템의 경우 페이저를 사용하여 UX를 최적화했습니다.

Comment on lines +96 to +190
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

중요: 프리뷰 데이터의 중복 feedId 수정 필요

프리뷰의 모든 AllFeedItem이 동일한 feedId = 1을 가지고 있습니다. FeedScreen에서 이 feedId를 key로 사용하므로, 중복된 key는 렌더링 문제를 일으킬 수 있습니다.

각 항목에 고유한 feedId를 부여해주세요.

                 AllFeedItem(
-                    feedId = 1,
+                    feedId = 2,
                     creatorId = 123L,
                     // ...
                 ),
                 AllFeedItem(
-                    feedId = 1,
+                    feedId = 3,
                     creatorId = 123L,
                     // ...
                 ),
                 AllFeedItem(
-                    feedId = 1,
+                    feedId = 4,
                     creatorId = 123L,
                     // ...
                 ),
                 AllFeedItem(
-                    feedId = 1,
+                    feedId = 5,
                     creatorId = 123L,
                     // ...
                 )
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
)
AllFeedItem(
feedId = 1,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 2,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 3,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 4,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
),
AllFeedItem(
feedId = 5,
creatorId = 123L,
creatorNickname = "user.01",
creatorProfileImageUrl = null,
aliasName = "공식 인플루언서",
aliasColor = "#97E4A3",
postDate = "2시간 전",
isbn = "9788983711892",
bookTitle = "코스모스",
bookAuthor = "칼 세이건",
contentBody = "이 책을 읽으면서 우주에 대한 새로운 시각을 갖게 되었습니다. 과학적 사실들이 아름다운 문장으로 표현되어 있어서 읽는 내내 감동받았어요.",
contentUrls = emptyList(),
likeCount = 42,
commentCount = 8,
isSaved = false,
isLiked = false,
isWriter = false
)
🤖 Prompt for AI Agents
In
app/src/main/java/com/texthip/thip/ui/feed/component/RecommendFeedCardSection.kt
around lines 96-190: the preview list uses duplicate feedId = 1 for every
AllFeedItem which will create duplicate keys in FeedScreen; assign each
AllFeedItem a unique feedId (e.g., 1,2,3,4,5 or unique longs) so keys are
unique; update any related mock data or tests that assume feedId=1.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 작가, 인플루언서 글 추천 [(THIP2025-375)]

1 participant