Skip to content

Commit 1a9d339

Browse files
committed
[BOOK-186] feat: 로그인 완료시, 온보딩/약관 동의 체크 로직 추가 및 네비게이션 분기 처리 구현
1 parent 37d1b35 commit 1a9d339

File tree

4 files changed

+37
-3
lines changed

4 files changed

+37
-3
lines changed

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ internal fun UserProfileResponse.toModel(): UserProfileModel {
2626
email = email,
2727
nickname = nickname,
2828
provider = provider,
29+
termsAgreed = termsAgreed,
2930
)
3031
}
3132

core/model/src/main/kotlin/com/ninecraft/booket/core/model/UserProfileModel.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ data class UserProfileModel(
88
val email: String,
99
val nickname: String,
1010
val provider: String,
11+
val termsAgreed: Boolean,
1112
)

core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/UserProfileResponse.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ data class UserProfileResponse(
1313
val nickname: String,
1414
@SerialName("provider")
1515
val provider: String,
16+
@SerialName("termsAgreed")
17+
val termsAgreed: Boolean,
1618
)

feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginPresenter.kt

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@ import androidx.compose.runtime.getValue
55
import androidx.compose.runtime.mutableStateOf
66
import androidx.compose.runtime.rememberCoroutineScope
77
import androidx.compose.runtime.setValue
8+
import com.slack.circuit.retained.collectAsRetainedState
89
import com.ninecraft.booket.core.data.api.repository.AuthRepository
10+
import com.ninecraft.booket.core.data.api.repository.UserRepository
11+
import com.ninecraft.booket.feature.screens.BottomNavigationScreen
912
import com.ninecraft.booket.feature.screens.LoginScreen
13+
import com.ninecraft.booket.feature.screens.OnboardingScreen
1014
import com.ninecraft.booket.feature.screens.TermsAgreementScreen
1115
import com.orhanobut.logger.Logger
1216
import com.slack.circuit.codegen.annotations.CircuitInject
@@ -21,14 +25,40 @@ import kotlinx.coroutines.launch
2125

2226
class LoginPresenter @AssistedInject constructor(
2327
@Assisted private val navigator: Navigator,
24-
private val repository: AuthRepository,
28+
private val authRepository: AuthRepository,
29+
private val userRepository: UserRepository,
2530
) : Presenter<LoginUiState> {
2631

2732
@Composable
2833
override fun present(): LoginUiState {
2934
val scope = rememberCoroutineScope()
3035
var isLoading by rememberRetained { mutableStateOf(false) }
3136
var sideEffect by rememberRetained { mutableStateOf<LoginSideEffect?>(null) }
37+
val isOnboardingCompleted by userRepository.isOnboardingCompleted.collectAsRetainedState(
38+
initial = false
39+
)
40+
41+
fun navigateAfterLogin() {
42+
scope.launch {
43+
userRepository.getUserProfile()
44+
.onSuccess { userProfile ->
45+
if (userProfile.termsAgreed) {
46+
if (isOnboardingCompleted) {
47+
navigator.resetRoot(BottomNavigationScreen)
48+
} else {
49+
navigator.resetRoot(OnboardingScreen)
50+
}
51+
} else {
52+
navigator.resetRoot(TermsAgreementScreen)
53+
}
54+
}.onFailure { exception ->
55+
exception.message?.let { Logger.e(it) }
56+
sideEffect = exception.message?.let {
57+
LoginSideEffect.ShowToast(it)
58+
}
59+
}
60+
}
61+
}
3262

3363
fun handleEvent(event: LoginUiEvent) {
3464
when (event) {
@@ -46,9 +76,9 @@ class LoginPresenter @AssistedInject constructor(
4676
scope.launch {
4777
try {
4878
isLoading = true
49-
repository.login(event.accessToken)
79+
authRepository.login(event.accessToken)
5080
.onSuccess {
51-
navigator.resetRoot(TermsAgreementScreen)
81+
navigateAfterLogin()
5282
}.onFailure { exception ->
5383
exception.message?.let { Logger.e(it) }
5484
sideEffect = exception.message?.let {

0 commit comments

Comments
 (0)