-
Notifications
You must be signed in to change notification settings - Fork 1
refactor: 피드 Compose 마이그레이션 #787
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
feat: 나의 활동 api 연결
|
Caution Review failedThe pull request is closed. 개요피드 화면을 View 기반에서 Jetpack Compose 기반으로 전환하고, 피드 관련 기능을 데이터/도메인/피처 모듈로 분리하는 대규모 리팩토링입니다. 네트워크 API 및 데이터 모델을 확장하고, 새로운 UI 컴포넌트와 디자인 시스템 요소를 추가합니다. 변경사항
예상 코드 리뷰 소요시간🎯 4 (복잡함) | ⏱️ ~60분 설명: 이 PR은 매우 광범위한 변경사항을 포함합니다. UI 계층의 대규모 마이그레이션(FeedFragment 전체 재작성), 아키텍처 계층 전반의 리팩토링(네트워크, 데이터, 도메인 모듈 분리), 새로운 feature 모듈 추가, 그리고 25개 이상의 새로운 Compose 컴포넌트 및 모델 추가가 포함되어 있습니다. 변경사항이 매우 이질적이며(UI, 데이터 계층, 모듈 구조, 디자인 시스템 등 다양한 영역), 각 영역에 대한 별도의 검토 논리가 필요합니다. 특히 피드백 메커니즘 변경, 캐싱 전략, API 서명 변경, 그리고 새로운 ViewModel 구현에 주의가 필요합니다. 관련된 가능성 있는 PR들
제안된 레이블
제안된 리뷰어
시
✨ Finishing touches
📜 Recent review detailsConfiguration used: Organization UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (71)
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit
ktlint
🚫 [ktlint] standard:blank-line-between-when-conditions reported by reviewdog 🐶
Add a blank line between all when-conditions in case at least one multiline when-condition is found in the statement
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 113 in 908531c
| FeedTab.SOSO_FEED -> if (state.sosoCategory == SosoFeedType.ALL) { |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 138 in 908531c
| val targetFeed = uiState.value.currentData.feeds.find { it.id == selectedFeedId } ?: return |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 150 in 908531c
| val updatedFeeds = state.currentData.feeds.map { feed -> |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 151 in 908531c
| if (feed.id == selectedFeedId) feed.copy( |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 151 in 908531c
| if (feed.id == selectedFeedId) feed.copy( |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 155 in 908531c
| else feed |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 155 in 908531c
| else feed |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 175 in 908531c
| val updatedFeeds = state.currentData.feeds.map { feed -> |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 197 in 908531c
| state.currentData.feeds.filter { it.id != feedId }.toImmutableList() |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 197 in 908531c
| state.currentData.feeds.filter { it.id != feedId }.toImmutableList() |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 210 in 908531c
| val targetFeed = uiState.value.currentData.feeds.find { it.id == feedId } ?: return |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 224 in 908531c
| state.currentData.feeds.filter { it.id != feedId }.toImmutableList() |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 224 in 908531c
| state.currentData.feeds.filter { it.id != feedId }.toImmutableList() |
🚫 [ktlint] standard:no-consecutive-blank-lines reported by reviewdog 🐶
Needless blank line(s)
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/FeedViewModel.kt
Line 234 in 908531c
🚫 [ktlint] standard:function-signature reported by reviewdog 🐶
No whitespace expected between opening parenthesis and first parameter name
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedEmptyCase.kt
Line 28 in 908531c
| modifier: Modifier = Modifier, |
🚫 [ktlint] standard:function-signature reported by reviewdog 🐶
No whitespace expected between last parameter and closing parenthesis
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedEmptyCase.kt
Line 28 in 908531c
| modifier: Modifier = Modifier, |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedFilterChip.kt
Line 46 in 908531c
| .background( |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedFilterChip.kt
Line 52 in 908531c
| .padding(horizontal = 13.dp), |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 42 in 908531c
| val contents = if (isMyFeed) persistentListOf("수정하기", "삭제하기") |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 42 in 908531c
| val contents = if (isMyFeed) persistentListOf("수정하기", "삭제하기") |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 43 in 908531c
| else persistentListOf("스포일러 신고", "부적절한 표현 신고") |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 43 in 908531c
| else persistentListOf("스포일러 신고", "부적절한 표현 신고") |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 53 in 908531c
| .background( |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 57 in 908531c
| .width(IntrinsicSize.Max), |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedMoreMenu.kt
Line 71 in 908531c
| .padding(vertical = 14.dp), |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/FeedSection.kt
Line 345 in 908531c
| .debouncedClickable { |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/MyFeedFilterModal.kt
Line 69 in 908531c
| .navigationBarsPadding(), |
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Unexpected newline before '.'
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/MyFeedFilterModal.kt
Line 155 in 908531c
| .debouncedClickable { |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/MyFeedFilterModal.kt
Line 229 in 908531c
| val next = if (isSelected) selectedCategories - category |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/MyFeedFilterModal.kt
Line 229 in 908531c
| val next = if (isSelected) selectedCategories - category |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/MyFeedFilterModal.kt
Line 230 in 908531c
| else selectedCategories + category |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/component/MyFeedFilterModal.kt
Line 230 in 908531c
| else selectedCategories + category |
🚫 [ktlint] standard:class-signature reported by reviewdog 🐶
Newline expected after opening parenthesis
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/FeedOrder.kt
Line 3 in 908531c
| enum class FeedOrder(val title: String) { |
🚫 [ktlint] standard:class-signature reported by reviewdog 🐶
Newline expected before closing parenthesis
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/FeedOrder.kt
Line 3 in 908531c
| enum class FeedOrder(val title: String) { |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/FeedUiModel.kt
Line 22 in 908531c
| } else null |
🚫 [ktlint] standard:if-else-bracing reported by reviewdog 🐶
All branches of the if statement should be wrapped between braces if at least one branch is wrapped between braces
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/FeedUiModel.kt
Line 22 in 908531c
| } else null |
🚫 [ktlint] standard:if-else-wrapping reported by reviewdog 🐶
Expected a newline
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/FeedUiModel.kt
Line 22 in 908531c
| } else null |
🚫 [ktlint] standard:multiline-if-else reported by reviewdog 🐶
Missing { ... }
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/FeedUiModel.kt
Line 22 in 908531c
| } else null |
🚫 [ktlint] standard:function-expression-body reported by reviewdog 🐶
Function body should be replaced with body expression
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/NovelCategory.kt
Line 41 in 908531c
| fun fromTag(tag: String): NovelCategory { |
🚫 [ktlint] standard:class-signature reported by reviewdog 🐶
Newline expected after opening parenthesis
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/SosoFeedType.kt
Line 3 in 908531c
| enum class SosoFeedType(val title: String) { |
🚫 [ktlint] standard:class-signature reported by reviewdog 🐶
Newline expected before closing parenthesis
WSS-Android/feature/feed/src/main/java/com/into/websoso/feature/feed/model/SosoFeedType.kt
Line 3 in 908531c
| enum class SosoFeedType(val title: String) { |
| CreateFeed.RESULT_OK, | ||
| OtherUserProfileBack.RESULT_OK, | ||
| -> { | ||
| -> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:indent reported by reviewdog 🐶
Unexpected indentation (24) (should be 20)
| onFirstItemClick = { feedId, isMyFeed -> | ||
| when (isMyFeed) { | ||
| true -> navigateToFeedEdit(feedId) | ||
| false -> showDialog<DialogReportPopupMenuBinding>( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:blank-line-between-when-conditions reported by reviewdog 🐶
Add a blank line between all when-conditions in case at least one multiline when-condition is found in the statement
| @@ -0,0 +1,39 @@ | |||
| package com.into.websoso.core.common.extensions | |||
|
|
|||
| /** | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:kdoc reported by reviewdog 🐶
A dangling toplevel KDoc is not allowed
| debounceTime: Long = 500L, | ||
| enabled: Boolean = true, | ||
| onClick: () -> Unit, | ||
| ): Modifier = composed { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:function-signature reported by reviewdog 🐶
Newline expected before expression body
| package com.into.websoso.core.common.extensions | ||
|
|
||
| fun Float?.orDefault(defaultValue: Float = 0f) = this ?: defaultValue | ||
| fun Long?.orDefault(defaultValue: Long = 0L) = this ?: defaultValue |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:blank-line-before-declaration reported by reviewdog 🐶
Expected a blank line for this declaration
| private val getMyFeedsUseCase: GetMyFeedsUseCase, | ||
| private val feedRepository: FeedRepository, | ||
| ) : ViewModel() { | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:no-empty-first-line-in-class-body reported by reviewdog 🐶
Class body should not start with blank line
| */ | ||
| fun updateTab(tab: FeedTab) { | ||
| _uiState.update { it.copy(selectedTab = tab) } | ||
| if (uiState.value.currentData.feeds.isEmpty()) fetchNextPage() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
|
|
||
| Log.d("123123 카테고리", category.toString()) | ||
| _uiState.update { it.copy(sosoCategory = category) } | ||
| if (uiState.value.currentData.feeds.isEmpty()) fetchNextPage() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
| runCatching { | ||
| when (state.selectedTab) { | ||
| FeedTab.MY_FEED -> getMyFeedsUseCase(lastFeedId = lastFeedId) | ||
| FeedTab.SOSO_FEED -> getFeedsUseCase( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:blank-line-between-when-conditions reported by reviewdog 🐶
Add a blank line between all when-conditions in case at least one multiline when-condition is found in the statement
| lastId = result.feeds.lastOrNull()?.id ?: 0, | ||
| isLoadable = result.isLoadable, | ||
| ) | ||
| currentState.updateCurrentSource(updatedData = updatedSource) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚫 [ktlint] standard:chain-method-continuation reported by reviewdog 🐶
Expected newline before '.'
m6z1
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨슨 ~~~! 퇴근!
📌𝘐𝘴𝘴𝘶𝘦𝘴
📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯
Summary by CodeRabbit
릴리스 노트
New Features
Refactor
Chores
✏️ Tip: You can customize this high-level summary in your review settings.