Skip to content

Commit 5ad95fc

Browse files
committed
Chore: Onboarding 관련 UiModel 네이밍 변경 및 Mapper 추가
- Onboarding에서 사용하는 UiModel 클래스명에 `UiModel` 접미사를 추가했습니다. - Domain Model을 UiModel로 변환하는 Mapper 함수를 추가하고, 기존의 `from` 팩토리 메서드를 대체했습니다.
1 parent 434bbb9 commit 5ad95fc

10 files changed

Lines changed: 90 additions & 105 deletions

File tree

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/OnBoardingScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import com.threegap.bitnagil.presentation.onboarding.component.template.OnBoardi
1717
import com.threegap.bitnagil.presentation.onboarding.component.template.OnBoardingSelectTemplate
1818
import com.threegap.bitnagil.presentation.onboarding.contract.OnBoardingSideEffect
1919
import com.threegap.bitnagil.presentation.onboarding.contract.OnBoardingState
20-
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItem
20+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItemUiModel
2121
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingPageInfo
2222
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingSetType
2323
import org.orbitmvi.orbit.compose.collectAsState
@@ -163,7 +163,7 @@ fun OnBoardingScreenPreview() {
163163
nextButtonEnable = false,
164164
currentOnBoardingPageInfo = OnBoardingPageInfo.RecommendRoutines(
165165
listOf(
166-
OnBoardingItem("1", "루틴명", "세부 루틴 한 줄 설명", null),
166+
OnBoardingItemUiModel("1", "루틴명", "세부 루틴 한 줄 설명", null),
167167
),
168168
),
169169
totalStep = 5,

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/OnBoardingViewModel.kt

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import com.threegap.bitnagil.domain.onboarding.usecase.RegisterRecommendOnBoardi
1111
import com.threegap.bitnagil.domain.user.usecase.FetchUserProfileUseCase
1212
import com.threegap.bitnagil.presentation.onboarding.contract.OnBoardingSideEffect
1313
import com.threegap.bitnagil.presentation.onboarding.contract.OnBoardingState
14-
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingAbstractTextItem
15-
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItem
14+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingAbstractTextItemUiModel
15+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItemUiModel
1616
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingPageInfo
1717
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingSetType
1818
import com.threegap.bitnagil.presentation.onboarding.model.navarg.OnBoardingScreenArg
19+
import com.threegap.bitnagil.presentation.onboarding.model.toUiModel
1920
import dagger.assisted.Assisted
2021
import dagger.assisted.AssistedFactory
2122
import dagger.assisted.AssistedInject
@@ -100,9 +101,7 @@ class OnBoardingViewModel @AssistedInject constructor(
100101

101102
val abstractPagePrefixText = onBoardingAbstract.prefix
102103
val abstractTexts = onBoardingAbstract.abstractTexts.map { onBoardingAbstractText ->
103-
onBoardingAbstractText.textItems.map { onBoardingAbstractTextItem ->
104-
OnBoardingAbstractTextItem.fromOnBoardingAbstractTextItem(onBoardingAbstractTextItem)
105-
}
104+
onBoardingAbstractText.textItems.map { it.toUiModel() }
106105
}
107106

108107
val existedOnBoardingAbstract = OnBoardingPageInfo.ExistedOnBoardingAbstract(
@@ -125,9 +124,7 @@ class OnBoardingViewModel @AssistedInject constructor(
125124

126125
fun loadOnBoardingItems() = intent {
127126
val onBoardings = getOnBoardingsUseCase()
128-
val onBoardingPages = onBoardings.map { onBoarding ->
129-
OnBoardingPageInfo.SelectOnBoarding.fromOnBoarding(onBoarding = onBoarding)
130-
}
127+
val onBoardingPages = onBoardings.map { it.toUiModel() }
131128

132129
val currentState = state
133130
if (currentState !is OnBoardingState.Idle) return@intent
@@ -175,9 +172,7 @@ class OnBoardingViewModel @AssistedInject constructor(
175172

176173
val abstractPagePrefixText = onBoardingAbstract.prefix
177174
val abstractTexts = onBoardingAbstract.abstractTexts.map { onBoardingAbstractText ->
178-
onBoardingAbstractText.textItems.map { onBoardingAbstractTextItem ->
179-
OnBoardingAbstractTextItem.fromOnBoardingAbstractTextItem(onBoardingAbstractTextItem)
180-
}
175+
onBoardingAbstractText.textItems.map { it.toUiModel() }
181176
}
182177

183178
reduce {
@@ -291,9 +286,7 @@ class OnBoardingViewModel @AssistedInject constructor(
291286
onSuccess = { recommendRoutines ->
292287
if (isActive) {
293288
applyRecommendRoutines(
294-
routines = recommendRoutines.map {
295-
OnBoardingItem.fromOnBoardingRecommendRoutine(it)
296-
},
289+
routines = recommendRoutines.map { it.toUiModel() },
297290
)
298291
}
299292
},
@@ -303,7 +296,7 @@ class OnBoardingViewModel @AssistedInject constructor(
303296
}
304297
}
305298

306-
private fun applyRecommendRoutines(routines: List<OnBoardingItem>) = intent {
299+
private fun applyRecommendRoutines(routines: List<OnBoardingItemUiModel>) = intent {
307300
val currentState = state
308301
if (currentState !is OnBoardingState.Idle) return@intent
309302

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingAbstractTemplate.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ import com.threegap.bitnagil.designsystem.BitnagilTheme
3838
import com.threegap.bitnagil.designsystem.R
3939
import com.threegap.bitnagil.designsystem.component.atom.BitnagilTextButton
4040
import com.threegap.bitnagil.presentation.common.ninepatch.ninePatchBackgroundNode
41-
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingAbstractTextItem
41+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingAbstractTextItemUiModel
4242

4343
@Composable
4444
fun OnBoardingAbstractTemplate(
4545
modifier: Modifier = Modifier,
4646
title: String,
4747
userName: String,
48-
onBoardingAbstractTexts: List<List<OnBoardingAbstractTextItem>>,
48+
onBoardingAbstractTexts: List<List<OnBoardingAbstractTextItemUiModel>>,
4949
onDispose: () -> Unit,
5050
onClickNextButton: () -> Unit,
5151
nextButtonEnable: Boolean,
@@ -120,7 +120,7 @@ private fun getIndexIconResourceId(index: Int): Int {
120120

121121
@Composable
122122
private fun OnBoardingAbstractText(
123-
onBoardingAbstractTextList: List<OnBoardingAbstractTextItem>,
123+
onBoardingAbstractTextList: List<OnBoardingAbstractTextItemUiModel>,
124124
iconResourceId: Int,
125125
) {
126126
val annotatedString = buildAnnotatedString {
@@ -214,31 +214,31 @@ private fun OnBoardingAbstractTemplatePreview() {
214214
userName = "안드로이드",
215215
onBoardingAbstractTexts = listOf(
216216
listOf(
217-
OnBoardingAbstractTextItem(
217+
OnBoardingAbstractTextItemUiModel(
218218
text = "텍스트1",
219219
isBold = true,
220220
),
221-
OnBoardingAbstractTextItem(
221+
OnBoardingAbstractTextItemUiModel(
222222
text = "텍스트2 아아아아아아아아아ㅏ아앙아아ㅏ아아아아아",
223223
isBold = false,
224224
),
225225
),
226226
listOf(
227-
OnBoardingAbstractTextItem(
227+
OnBoardingAbstractTextItemUiModel(
228228
text = "텍스트1",
229229
isBold = true,
230230
),
231-
OnBoardingAbstractTextItem(
231+
OnBoardingAbstractTextItemUiModel(
232232
text = "텍스트2",
233233
isBold = false,
234234
),
235235
),
236236
listOf(
237-
OnBoardingAbstractTextItem(
237+
OnBoardingAbstractTextItemUiModel(
238238
text = "텍스트1",
239239
isBold = true,
240240
),
241-
OnBoardingAbstractTextItem(
241+
OnBoardingAbstractTextItemUiModel(
242242
text = "텍스트2",
243243
isBold = false,
244244
),

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingSelectTemplate.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ import com.threegap.bitnagil.designsystem.BitnagilTheme
1616
import com.threegap.bitnagil.designsystem.component.atom.BitnagilSelectButton
1717
import com.threegap.bitnagil.designsystem.component.atom.BitnagilTextButton
1818
import com.threegap.bitnagil.designsystem.component.atom.BitnagilTextButtonColor
19-
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItem
19+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItemUiModel
2020

2121
@Composable
2222
fun OnBoardingSelectTemplate(
2323
modifier: Modifier = Modifier,
2424
title: String,
2525
subText: String? = null,
26-
items: List<OnBoardingItem>,
26+
items: List<OnBoardingItemUiModel>,
2727
nextButtonEnable: Boolean = false,
2828
onClickNextButton: () -> Unit,
2929
onClickItem: ((String) -> Unit)?,

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/Preview.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.threegap.bitnagil.presentation.onboarding.component.template
22

33
import androidx.compose.runtime.Composable
44
import androidx.compose.ui.tooling.preview.Preview
5-
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItem
5+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingItemUiModel
66

77
@Preview(showBackground = true)
88
@Composable
@@ -11,22 +11,22 @@ fun OnBoardingTemplatePreview() {
1111
title = "title",
1212
subText = "subText",
1313
items = listOf(
14-
OnBoardingItem(
14+
OnBoardingItemUiModel(
1515
id = "item1",
1616
title = "title1",
1717
description = "description1",
1818
),
19-
OnBoardingItem(
19+
OnBoardingItemUiModel(
2020
id = "item2",
2121
title = "title2",
2222
description = "description2",
2323
),
24-
OnBoardingItem(
24+
OnBoardingItemUiModel(
2525
id = "item3",
2626
title = "title3",
2727
description = "description3",
2828
),
29-
OnBoardingItem(
29+
OnBoardingItemUiModel(
3030
id = "item4",
3131
title = "title4",
3232
description = "description4",

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/model/OnBoardingAbstractTextItem.kt

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.threegap.bitnagil.presentation.onboarding.model
2+
3+
import android.os.Parcelable
4+
import kotlinx.parcelize.Parcelize
5+
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingAbstractTextItem
6+
7+
@Parcelize
8+
data class OnBoardingAbstractTextItemUiModel(
9+
val text: String,
10+
val isBold: Boolean,
11+
) : Parcelable
12+
13+
internal fun OnBoardingAbstractTextItem.toUiModel(): OnBoardingAbstractTextItemUiModel =
14+
OnBoardingAbstractTextItemUiModel(
15+
text = this.text,
16+
isBold = this.isBold,
17+
)

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/model/OnBoardingItem.kt

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.threegap.bitnagil.presentation.onboarding.model
2+
3+
import android.os.Parcelable
4+
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingItem
5+
import com.threegap.bitnagil.domain.onboarding.model.OnBoardingRecommendRoutine
6+
import kotlinx.parcelize.Parcelize
7+
8+
@Parcelize
9+
data class OnBoardingItemUiModel(
10+
val id: String,
11+
val title: String,
12+
val description: String?,
13+
val selectedIndex: Int? = null,
14+
) : Parcelable {
15+
val selected: Boolean
16+
get() = selectedIndex != null
17+
}
18+
19+
internal fun OnBoardingItem.toUiModel(): OnBoardingItemUiModel =
20+
OnBoardingItemUiModel(
21+
id = this.id,
22+
title = this.title,
23+
description = this.description,
24+
selectedIndex = null,
25+
)
26+
27+
internal fun OnBoardingRecommendRoutine.toUiModel(): OnBoardingItemUiModel =
28+
OnBoardingItemUiModel(
29+
id = this.id,
30+
title = this.name,
31+
description = this.description,
32+
selectedIndex = null,
33+
)

presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/model/OnBoardingPageInfo.kt

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.threegap.bitnagil.presentation.onboarding.model
33
import android.os.Parcelable
44
import androidx.compose.runtime.Stable
55
import com.threegap.bitnagil.domain.onboarding.model.OnBoarding
6+
import com.threegap.bitnagil.presentation.onboarding.model.OnBoardingPageInfo.SelectOnBoarding
67
import kotlinx.parcelize.Parcelize
78

89
@Parcelize
@@ -13,30 +14,18 @@ sealed class OnBoardingPageInfo : Parcelable {
1314
@Parcelize
1415
data class ExistedOnBoardingAbstract(
1516
val prefix: String,
16-
@Stable val abstractTexts: List<List<OnBoardingAbstractTextItem>>,
17+
@Stable val abstractTexts: List<List<OnBoardingAbstractTextItemUiModel>>,
1718
) : OnBoardingPageInfo()
1819

1920
@Parcelize
2021
data class SelectOnBoarding(
2122
val id: String,
2223
val title: String,
2324
val description: String?,
24-
@Stable val items: List<OnBoardingItem> = emptyList(),
25+
@Stable val items: List<OnBoardingItemUiModel> = emptyList(),
2526
val multipleSelectable: Boolean = false,
2627
) : OnBoardingPageInfo() {
2728
companion object {
28-
fun fromOnBoarding(onBoarding: OnBoarding): SelectOnBoarding {
29-
return SelectOnBoarding(
30-
id = onBoarding.id,
31-
title = onBoarding.title,
32-
description = onBoarding.description,
33-
items = onBoarding.onboardingItemList.map {
34-
OnBoardingItem.fromOnBoardingItem(it)
35-
},
36-
multipleSelectable = onBoarding.multipleSelectable,
37-
)
38-
}
39-
4029
private var lastSelectedIndex = 0
4130
}
4231

@@ -68,11 +57,11 @@ sealed class OnBoardingPageInfo : Parcelable {
6857
@Parcelize
6958
data class Abstract(
7059
val prefix: String,
71-
@Stable val abstractTexts: List<List<OnBoardingAbstractTextItem>>,
60+
@Stable val abstractTexts: List<List<OnBoardingAbstractTextItemUiModel>>,
7261
) : OnBoardingPageInfo()
7362

7463
@Parcelize
75-
data class RecommendRoutines(@Stable val routines: List<OnBoardingItem>) : OnBoardingPageInfo() {
64+
data class RecommendRoutines(@Stable val routines: List<OnBoardingItemUiModel>) : OnBoardingPageInfo() {
7665
companion object {
7766
private var lastSelectedIndex = 0
7867
}
@@ -98,3 +87,12 @@ sealed class OnBoardingPageInfo : Parcelable {
9887
}
9988
}
10089
}
90+
91+
internal fun OnBoarding.toUiModel(): SelectOnBoarding =
92+
SelectOnBoarding(
93+
id = this.id,
94+
title = this.title,
95+
description = this.description,
96+
items = this.onboardingItemList.map { it.toUiModel() },
97+
multipleSelectable = this.multipleSelectable,
98+
)

0 commit comments

Comments
 (0)