Skip to content

Commit 9ed9968

Browse files
committed
[BOOK-92] feat: 내 서재 화면 진입시 유저 프로필 조회 API 호출되도록 임시 구현
1 parent 8cd9686 commit 9ed9968

2 files changed

Lines changed: 61 additions & 12 deletions

File tree

feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package com.ninecraft.booket.feature.library
22

33
import androidx.compose.runtime.Composable
4+
import androidx.compose.runtime.LaunchedEffect
45
import androidx.compose.runtime.getValue
56
import androidx.compose.runtime.mutableStateOf
67
import androidx.compose.runtime.rememberCoroutineScope
78
import androidx.compose.runtime.setValue
89
import com.ninecraft.booket.core.common.utils.handleException
910
import com.ninecraft.booket.core.data.api.repository.AuthRepository
11+
import com.ninecraft.booket.core.data.api.repository.UserRepository
1012
import com.ninecraft.booket.feature.login.LoginScreen
1113
import com.orhanobut.logger.Logger
1214
import com.slack.circuit.codegen.annotations.CircuitInject
@@ -21,14 +23,47 @@ import kotlinx.coroutines.launch
2123

2224
class LibraryPresenter @AssistedInject constructor(
2325
@Assisted private val navigator: Navigator,
24-
private val repository: AuthRepository,
26+
private val authRepository: AuthRepository,
27+
private val userRepository: UserRepository,
2528
) : Presenter<LibraryScreen.State> {
2629

2730
@Composable
2831
override fun present(): LibraryScreen.State {
2932
val scope = rememberCoroutineScope()
3033
var isLoading by rememberRetained { mutableStateOf(false) }
3134
var sideEffect by rememberRetained { mutableStateOf<LibraryScreen.SideEffect?>(null) }
35+
var nickname by rememberRetained { mutableStateOf("") }
36+
var email by rememberRetained { mutableStateOf("") }
37+
38+
LaunchedEffect(Unit) {
39+
scope.launch {
40+
try {
41+
isLoading = true
42+
userRepository.getUserProfile()
43+
.onSuccess { user ->
44+
nickname = user.nickname
45+
email = user.email
46+
}
47+
.onFailure { exception ->
48+
val handleErrorMessage = { message: String ->
49+
Logger.e(message)
50+
sideEffect = LibraryScreen.SideEffect.ShowToast(message)
51+
}
52+
53+
handleException(
54+
exception = exception,
55+
onServerError = handleErrorMessage,
56+
onNetworkError = handleErrorMessage,
57+
onLoginRequired = {
58+
navigator.resetRoot(LoginScreen)
59+
},
60+
)
61+
}
62+
} finally {
63+
isLoading = false
64+
}
65+
}
66+
}
3267

3368
fun handleEvent(event: LibraryScreen.Event) {
3469
when (event) {
@@ -40,9 +75,9 @@ class LibraryPresenter @AssistedInject constructor(
4075
scope.launch {
4176
try {
4277
isLoading = true
43-
repository.logout()
78+
authRepository.logout()
4479
.onSuccess {
45-
repository.clearTokens()
80+
authRepository.clearTokens()
4681
navigator.resetRoot(LoginScreen)
4782
}
4883
.onFailure { exception ->
@@ -70,6 +105,8 @@ class LibraryPresenter @AssistedInject constructor(
70105

71106
return LibraryScreen.State(
72107
isLoading = isLoading,
108+
nickname = nickname,
109+
email = email,
73110
sideEffect = sideEffect,
74111
eventSink = ::handleEvent,
75112
)

feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryScreen.kt

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ninecraft.booket.feature.library
33
import androidx.compose.foundation.layout.Arrangement
44
import androidx.compose.foundation.layout.Box
55
import androidx.compose.foundation.layout.Column
6+
import androidx.compose.foundation.layout.Spacer
67
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.foundation.layout.fillMaxWidth
89
import androidx.compose.foundation.layout.height
@@ -31,6 +32,8 @@ import kotlinx.parcelize.Parcelize
3132
data object LibraryScreen : Screen {
3233
data class State(
3334
val isLoading: Boolean = false,
35+
val nickname: String = "",
36+
val email: String = "",
3437
val sideEffect: SideEffect? = null,
3538
val eventSink: (Event) -> Unit,
3639
) : CircuitUiState
@@ -51,6 +54,11 @@ internal fun Library(
5154
state: LibraryScreen.State,
5255
modifier: Modifier = Modifier,
5356
) {
57+
HandleLibrarySideEffects(
58+
state = state,
59+
eventSink = state.eventSink,
60+
)
61+
5462
Column(
5563
modifier = modifier.fillMaxSize(),
5664
horizontalAlignment = Alignment.CenterHorizontally,
@@ -68,21 +76,23 @@ internal fun LibraryContent(
6876
state: LibraryScreen.State,
6977
modifier: Modifier = Modifier,
7078
) {
71-
HandleLibrarySideEffects(
72-
state = state,
73-
eventSink = state.eventSink,
74-
)
75-
7679
Column(
7780
modifier = modifier.fillMaxSize(),
7881
horizontalAlignment = Alignment.CenterHorizontally,
7982
verticalArrangement = Arrangement.Center,
8083
) {
8184
Box(modifier = modifier.fillMaxSize()) {
82-
Text(
83-
text = "내 서재",
84-
modifier = Modifier.align(Alignment.Center),
85-
)
85+
Column(
86+
modifier = Modifier.fillMaxSize(),
87+
horizontalAlignment = Alignment.CenterHorizontally,
88+
verticalArrangement = Arrangement.Center,
89+
) {
90+
Text(text = "내 서재")
91+
Spacer(modifier = Modifier.height(16.dp))
92+
Text(text = state.nickname)
93+
Spacer(modifier = Modifier.height(16.dp))
94+
Text(text = state.email)
95+
}
8696
BooketButton(
8797
onClick = {
8898
state.eventSink(LibraryScreen.Event.OnLogoutButtonClick)
@@ -118,6 +128,8 @@ private fun LibraryPreview() {
118128
BooketTheme {
119129
Library(
120130
state = LibraryScreen.State(
131+
nickname = "홍길동",
132+
email = "test@test.com",
121133
eventSink = {},
122134
),
123135
)

0 commit comments

Comments
 (0)