Skip to content

Commit 39fdfa2

Browse files
committed
[BOOK-183] feat: 온보딩 1회 완료시 다시 보이지 않도록 설정
1 parent 29f08a1 commit 39fdfa2

File tree

5 files changed

+31
-4
lines changed

5 files changed

+31
-4
lines changed

core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/AuthRepository.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ package com.ninecraft.booket.core.data.api.repository
22

33
interface AuthRepository {
44
suspend fun login(accessToken: String): Result<Unit>
5+
56
suspend fun logout(): Result<Unit>
67
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.ninecraft.booket.core.data.api.repository
22

33
import com.ninecraft.booket.core.model.UserProfileModel
4+
import kotlinx.coroutines.flow.Flow
45

56
interface UserRepository {
67
suspend fun getUserProfile(): Result<UserProfileModel>
8+
9+
val isOnboardingCompleted: Flow<Boolean>
10+
11+
suspend fun setOnboardingCompleted(isCompleted: Boolean)
712
}

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,21 @@ package com.ninecraft.booket.core.data.impl.repository
33
import com.ninecraft.booket.core.common.utils.runSuspendCatching
44
import com.ninecraft.booket.core.data.api.repository.UserRepository
55
import com.ninecraft.booket.core.data.impl.mapper.toModel
6+
import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource
67
import com.ninecraft.booket.core.network.service.ReedService
78
import javax.inject.Inject
89

910
internal class DefaultUserRepository @Inject constructor(
1011
private val service: ReedService,
12+
private val onboardingDataSource: OnboardingDataSource,
1113
) : UserRepository {
1214
override suspend fun getUserProfile() = runSuspendCatching {
1315
service.getUserProfile().toModel()
1416
}
17+
18+
override val isOnboardingCompleted = onboardingDataSource.isOnboardingCompleted
19+
20+
override suspend fun setOnboardingCompleted(isCompleted: Boolean) {
21+
onboardingDataSource.setOnboardingCompleted(isCompleted)
22+
}
1523
}

feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementPresenter.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@ import androidx.compose.runtime.mutableStateOf
77
import androidx.compose.runtime.remember
88
import androidx.compose.runtime.setValue
99
import com.ninecraft.booket.core.common.constants.WebViewConstants
10+
import com.ninecraft.booket.core.data.api.repository.UserRepository
11+
import com.ninecraft.booket.feature.screens.BottomNavigationScreen
1012
import com.ninecraft.booket.feature.screens.OnboardingScreen
1113
import com.ninecraft.booket.feature.screens.TermsAgreementScreen
1214
import com.ninecraft.booket.feature.screens.WebViewScreen
1315
import com.slack.circuit.codegen.annotations.CircuitInject
16+
import com.slack.circuit.retained.collectAsRetainedState
1417
import com.slack.circuit.retained.rememberRetained
1518
import com.slack.circuit.runtime.Navigator
1619
import com.slack.circuit.runtime.presenter.Presenter
@@ -23,6 +26,7 @@ import kotlinx.collections.immutable.toPersistentList
2326

2427
class TermsAgreementPresenter @AssistedInject constructor(
2528
@Assisted private val navigator: Navigator,
29+
private val repository: UserRepository,
2630
) : Presenter<TermsAgreementUiState> {
2731

2832
@Composable
@@ -37,6 +41,8 @@ class TermsAgreementPresenter @AssistedInject constructor(
3741
}
3842
}
3943

44+
val isOnboardingCompleted by repository.isOnboardingCompleted.collectAsRetainedState(initial = false)
45+
4046
fun handleEvent(event: TermsAgreementUiEvent) {
4147
when (event) {
4248
is TermsAgreementUiEvent.OnAllTermsAgreedClick -> {
@@ -59,9 +65,11 @@ class TermsAgreementPresenter @AssistedInject constructor(
5965
}
6066

6167
is TermsAgreementUiEvent.OnStartButtonClick -> {
62-
// TODO 온보딩 완료 여부 확인
63-
// navigator.resetRoot(BottomNavigationScreen)
64-
navigator.resetRoot(OnboardingScreen)
68+
if (isOnboardingCompleted) {
69+
navigator.resetRoot(BottomNavigationScreen)
70+
} else {
71+
navigator.resetRoot(OnboardingScreen)
72+
}
6573
}
6674
}
6775
}

feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingPresenter.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package com.ninecraft.booket.feature.onboarding
44
import androidx.compose.foundation.pager.rememberPagerState
55
import androidx.compose.runtime.Composable
66
import androidx.compose.runtime.rememberCoroutineScope
7+
import com.ninecraft.booket.core.data.api.repository.UserRepository
78
import com.ninecraft.booket.feature.screens.HomeScreen
89
import com.ninecraft.booket.feature.screens.OnboardingScreen
910
import com.slack.circuit.codegen.annotations.CircuitInject
@@ -19,6 +20,7 @@ const val ONBOARDING_STEPS_COUNT = 3
1920

2021
class OnboardingPresenter @AssistedInject constructor(
2122
@Assisted private val navigator: Navigator,
23+
private val repository: UserRepository,
2224
) : Presenter<OnboardingUiState> {
2325

2426
@Composable
@@ -30,7 +32,10 @@ class OnboardingPresenter @AssistedInject constructor(
3032
when (event) {
3133
is OnboardingUiEvent.OnNextButtonClick -> {
3234
if (event.currentStep == 2) {
33-
navigator.resetRoot(HomeScreen)
35+
scope.launch {
36+
repository.setOnboardingCompleted(true)
37+
navigator.resetRoot(HomeScreen)
38+
}
3439
} else {
3540
pagerState.let { state ->
3641
scope.launch {

0 commit comments

Comments
 (0)