From 6d693568406de5c079c7b942ec45ad92a6795640 Mon Sep 17 00:00:00 2001 From: Giovanni Junseo Kim Date: Fri, 23 Jan 2026 15:50:59 +0900 Subject: [PATCH 1/4] =?UTF-8?q?refactor:=20CollectionDetail=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EB=A1=9C=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=EB=B0=8F=20=EB=A7=A4=ED=8D=BC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `CollectionDetailMapper`를 신설하여 DTO에서 Model로의 변환 로직을 분리 - `CollectionDetailModelNew`에서 `userId` 및 `isMine` 관련 로직 제거 - `CollectionRepository`에서 `PreferencesManager` 의존성을 제거하고 매퍼를 사용하도록 수정 - `CollectionDetailScreen` 및 관련 컴포넌트에서 `isMine` 파라미터 제거 및 노출 로직 수정 --- .../collection/CollectionDetailMapper.kt | 45 +++++++++++++++++ .../model/collection/CollectionDetailModel.kt | 46 +---------------- .../domain/repository/CollectionRepository.kt | 9 +--- .../CollectionDetailScreen.kt | 49 +++++-------------- 4 files changed, 60 insertions(+), 89 deletions(-) create mode 100644 app/src/main/java/com/flint/domain/mapper/collection/CollectionDetailMapper.kt diff --git a/app/src/main/java/com/flint/domain/mapper/collection/CollectionDetailMapper.kt b/app/src/main/java/com/flint/domain/mapper/collection/CollectionDetailMapper.kt new file mode 100644 index 00000000..f274d793 --- /dev/null +++ b/app/src/main/java/com/flint/domain/mapper/collection/CollectionDetailMapper.kt @@ -0,0 +1,45 @@ +package com.flint.domain.mapper.collection + +import com.flint.data.dto.collection.response.CollectionDetailResponseDto +import com.flint.domain.model.AuthorModelNew +import com.flint.domain.model.collection.CollectionDetailModelNew +import com.flint.domain.model.content.ContentModelNew +import com.flint.domain.type.UserRoleType +import kotlinx.collections.immutable.toImmutableList +import java.time.LocalDate + +fun CollectionDetailResponseDto.toModel(): CollectionDetailModelNew { + return CollectionDetailModelNew( + author = author.toModel(), + contents = contents.map { it.toModel() }.toImmutableList(), + createdAt = LocalDate.parse(createdAt), + description = description, + id = id, + thumbnailUrl = thumbnailUrl, + isBookmarked = isBookmarked, + title = title, + ) +} + +private fun CollectionDetailResponseDto.Author.toModel(): AuthorModelNew { + return AuthorModelNew( + id = id, + nickname = nickname, + profileImageUrl = profileImageUrl, + userRole = runCatching { UserRoleType.valueOf(userRole) }.getOrDefault(UserRoleType.NONE) + ) +} + +private fun CollectionDetailResponseDto.Content.toModel(): ContentModelNew { + return ContentModelNew( + director = director, + bookmarkCount = bookmarkCount, + id = id, + isBookmarked = isBookmarked, + isSpoiler = isSpoiler, + reason = reason, + imageUrl = imageUrl, + title = title, + year = year, + ) +} diff --git a/app/src/main/java/com/flint/domain/model/collection/CollectionDetailModel.kt b/app/src/main/java/com/flint/domain/model/collection/CollectionDetailModel.kt index 4d338b79..3810500b 100644 --- a/app/src/main/java/com/flint/domain/model/collection/CollectionDetailModel.kt +++ b/app/src/main/java/com/flint/domain/model/collection/CollectionDetailModel.kt @@ -1,11 +1,8 @@ package com.flint.domain.model.collection -import com.flint.data.dto.collection.response.CollectionDetailResponseDto import com.flint.domain.model.AuthorModelNew import com.flint.domain.model.content.ContentModelNew -import com.flint.domain.type.UserRoleType import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.toImmutableList import java.time.LocalDate data class CollectionDetailModelNew( @@ -17,45 +14,4 @@ data class CollectionDetailModelNew( val thumbnailUrl: String, val isBookmarked: Boolean, val title: String, - private val userId: String, -) { - constructor( - collectionDetail: CollectionDetailResponseDto, - userId: String, - ) : this( - author = collectionDetail.author.toModel(), - contents = collectionDetail.contents.map { it.toModel() }.toImmutableList(), - createdAt = LocalDate.parse(collectionDetail.createdAt), - description = collectionDetail.description, - id = collectionDetail.id, - thumbnailUrl = collectionDetail.thumbnailUrl, - isBookmarked = collectionDetail.isBookmarked, - title = collectionDetail.title, - userId = userId - ) - - val isMine: Boolean = author.id == userId -} - -private fun CollectionDetailResponseDto.Author.toModel(): AuthorModelNew { - return AuthorModelNew( - id = id, - nickname = nickname, - profileImageUrl = profileImageUrl, - userRole = runCatching { UserRoleType.valueOf(userRole) }.getOrDefault(UserRoleType.NONE) - ) -} - -private fun CollectionDetailResponseDto.Content.toModel(): ContentModelNew { - return ContentModelNew( - director = director, - bookmarkCount = bookmarkCount, - id = id, - isBookmarked = isBookmarked, - isSpoiler = isSpoiler, - reason = reason, - imageUrl = imageUrl, - title = title, - year = year, - ) -} +) diff --git a/app/src/main/java/com/flint/domain/repository/CollectionRepository.kt b/app/src/main/java/com/flint/domain/repository/CollectionRepository.kt index c681b319..46c0ce2c 100644 --- a/app/src/main/java/com/flint/domain/repository/CollectionRepository.kt +++ b/app/src/main/java/com/flint/domain/repository/CollectionRepository.kt @@ -1,22 +1,18 @@ package com.flint.domain.repository -import com.flint.core.common.util.DataStoreKey.USER_ID import com.flint.core.common.util.suspendRunCatching import com.flint.data.api.CollectionApi import com.flint.data.dto.collection.request.CollectionCreateRequestDto import com.flint.data.dto.collection.response.CollectionDetailResponseDto -import com.flint.data.local.PreferencesManager import com.flint.domain.mapper.collection.toModel import com.flint.domain.model.collection.CollectionCreateModel import com.flint.domain.model.collection.CollectionDetailModelNew import com.flint.domain.model.collection.CollectionListModel import com.flint.domain.model.collection.CollectionsModel -import kotlinx.coroutines.flow.first import javax.inject.Inject class CollectionRepository @Inject constructor( private val apiService: CollectionApi, - private val preferencesManager: PreferencesManager, ) { // 컬렉션 목록 조회 (페이지네이션) suspend fun getCollections(cursor: Long?, size: Int): Result = @@ -29,7 +25,7 @@ class CollectionRepository @Inject constructor( // 컬렉션 생성 suspend fun postCollectionCreate( - requestDto: CollectionCreateRequestDto + requestDto: CollectionCreateRequestDto, ): Result = suspendRunCatching { apiService.postCollectionCreate(requestDto).data.toModel() @@ -41,9 +37,8 @@ class CollectionRepository @Inject constructor( suspendRunCatching { val response: CollectionDetailResponseDto = apiService.getCollectionDetail(collectionId).data - val userId: String = preferencesManager.getString(USER_ID).first() - CollectionDetailModelNew(response, userId) + response.toModel() } // 최근 본 컬렉션 목록 조회 diff --git a/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt b/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt index 1a851f84..fa6a82d9 100644 --- a/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt +++ b/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt @@ -110,7 +110,6 @@ fun CollectionDetailRoute( paddingValues = paddingValues, targetImageUrl = targetImageUrl, title = collectionDetail.title, - isMine = collectionDetail.isMine, isBookmarked = collectionDetail.isBookmarked, authorNickname = collectionDetail.author.nickname, authorUserRoleType = collectionDetail.author.userRole, @@ -217,7 +216,6 @@ fun CollectionDetailRoute( fun CollectionDetailScreen( paddingValues: PaddingValues, title: String, - isMine: Boolean, isBookmarked: Boolean, authorNickname: String, authorUserRoleType: UserRoleType, @@ -291,7 +289,6 @@ fun CollectionDetailScreen( ) { Thumbnail( title = title, - isMine = isMine, isBookmarked = isBookmarked, onSaveDoneButtonClick = onSaveDoneButtonClick, onSaveNoneButtonClick = onSaveNoneButtonClick, @@ -535,7 +532,6 @@ private fun PeopleWhoSavedThisCollectionPreview( @Composable private fun Thumbnail( title: String, - isMine: Boolean, isBookmarked: Boolean, onSaveDoneButtonClick: () -> Unit, onSaveNoneButtonClick: () -> Unit, @@ -571,20 +567,18 @@ private fun Thumbnail( maxLines = 2, overflow = TextOverflow.Ellipsis ) - if (!isMine) { - if (isBookmarked) { - FlintSaveDoneButton( - onClick = { - onSaveDoneButtonClick() - }, - ) - } else { - FlintSaveNoneButton( - onClick = { - onSaveNoneButtonClick() - }, - ) - } + if (isBookmarked) { + FlintSaveDoneButton( + onClick = { + onSaveDoneButtonClick() + }, + ) + } else { + FlintSaveNoneButton( + onClick = { + onSaveNoneButtonClick() + }, + ) } } } @@ -803,11 +797,6 @@ private class HeaderPreviewProvider : PreviewParameterProvider Date: Fri, 23 Jan 2026 16:04:44 +0900 Subject: [PATCH 2/4] =?UTF-8?q?style:=20FlintIconButton=EC=9D=98=20content?= =?UTF-8?q?Padding=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EC=A7=80=EC=9B=90=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `FlintIconButton`에 `contentPadding` 파라미터를 추가하여 기본값 설정 및 외부 주입이 가능하도록 수정 - `CollectionCreateScreen` 내 비공개 설정 버튼에 특정 `contentPadding` 적용 --- .../core/designsystem/component/button/FlintIconButton.kt | 3 ++- .../presentation/collectioncreate/CollectionCreateScreen.kt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/flint/core/designsystem/component/button/FlintIconButton.kt b/app/src/main/java/com/flint/core/designsystem/component/button/FlintIconButton.kt index eede860d..f019427f 100644 --- a/app/src/main/java/com/flint/core/designsystem/component/button/FlintIconButton.kt +++ b/app/src/main/java/com/flint/core/designsystem/component/button/FlintIconButton.kt @@ -25,6 +25,7 @@ fun FlintIconButton( onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, + contentPadding: PaddingValues = PaddingValues(10.dp) ) { FlintBasicButton( text = text, @@ -32,7 +33,7 @@ fun FlintIconButton( onClick = onClick, enabled = enabled, leadingIconRes = iconRes, - contentPadding = PaddingValues(10.dp), + contentPadding = contentPadding, modifier = modifier .padding(vertical = 2.dp) diff --git a/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt b/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt index 869925d9..c66bd72e 100644 --- a/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt +++ b/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt @@ -226,6 +226,7 @@ fun CollectionCreateScreen( }, onClick = { onPublicChanged(false) }, modifier = Modifier.weight(1f), + contentPadding = PaddingValues(start = 8.dp, end = 12.dp, top= 10.dp, bottom = 10.dp) ) } } From b9352ad06afe26ed9ca6096138338c755b2bd7fc Mon Sep 17 00:00:00 2001 From: Giovanni Junseo Kim Date: Fri, 23 Jan 2026 17:06:57 +0900 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=EC=9E=91=ED=92=88=20=EC=84=A4?= =?UTF-8?q?=EB=AA=85=EB=A7=88=EB=8B=A4=20=EC=97=AC=EB=B0=B1=EC=9D=B4=20?= =?UTF-8?q?=EB=8B=A4=EB=A5=B8=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/collectiondetail/CollectionDetailScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt b/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt index fa6a82d9..a4eb4e72 100644 --- a/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt +++ b/app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt @@ -773,7 +773,7 @@ private fun Content( ) } - Spacer(Modifier.height(20.dp)) + Spacer(Modifier.height(64.dp)) } } } From 9f578993733f52075c585f42e18254aec4a670b6 Mon Sep 17 00:00:00 2001 From: Giovanni Junseo Kim Date: Fri, 23 Jan 2026 17:08:45 +0900 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20=EC=9E=91=ED=92=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=ED=95=98=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EC=9C=84=20?= =?UTF-8?q?=EC=95=84=EB=9E=98=20=EB=84=93=EC=9D=B4=20=ED=99=95=EC=9D=B8=20?= =?UTF-8?q?=ED=95=9C=EB=B2=88=20=ED=95=B4=EC=A3=BC=EC=84=B8=EC=9A=94=20?= =?UTF-8?q?=EC=82=B4=EC=A7=9D=20=EC=A2=81=EC=9D=80=20=EB=8A=90=EB=82=8C?= =?UTF-8?q?=EC=9E=85=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/collectioncreate/CollectionCreateScreen.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt b/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt index c66bd72e..ea9bc382 100644 --- a/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt +++ b/app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt @@ -301,6 +301,7 @@ fun CollectionCreateScreen( Modifier .fillMaxWidth() .defaultMinSize(minHeight = 80.dp), + contentPadding = PaddingValues(vertical = 28.dp) ) Spacer(Modifier.height(36.dp))