Skip to content

Commit 3535cb0

Browse files
committed
[BOOK-74] feat: 소셜 로그인 API 연동
1 parent ff6c915 commit 3535cb0

File tree

7 files changed

+35
-22
lines changed

7 files changed

+35
-22
lines changed

app/build.gradle.kts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,14 @@ ksp {
3737

3838
dependencies {
3939
implementations(
40+
projects.core.common,
41+
projects.core.data.api,
42+
projects.core.data.impl,
43+
projects.core.datastore,
4044
projects.core.designsystem,
45+
projects.core.model,
46+
projects.core.network,
47+
projects.core.ui,
4148

4249
projects.feature.home,
4350
projects.feature.library,

build-logic/src/main/kotlin/AndroidFeatureConventionPlugin.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ internal class AndroidFeatureConventionPlugin : Plugin<Project> {
1818
)
1919

2020
dependencies {
21+
implementation(project(path = ":core:common"))
22+
implementation(project(path = ":core:data:api"))
2123
implementation(project(path = ":core:designsystem"))
24+
implementation(project(path = ":core:model"))
2225
implementation(project(path = ":core:ui"))
2326

2427
implementation(libs.bundles.circuit)

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/RepositoryModule.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import javax.inject.Singleton
1111
@Module
1212
@InstallIn(SingletonComponent::class)
1313
internal abstract class RepositoryModule {
14+
1415
@Binds
1516
@Singleton
1617
abstract fun bindAuthRepository(defaultAuthRepository: DefaultAuthRepository): AuthRepository

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ internal fun HandleLoginSideEffects(
2020
kakaoLoginClient.loginWithKakao(
2121
context = context,
2222
onSuccess = { token ->
23-
eventSink(LoginScreen.Event.LoginSuccess(token))
23+
eventSink(LoginScreen.Event.Login(token))
2424
},
2525
onFailure = { errorMessage ->
2626
eventSink(LoginScreen.Event.LoginFailure(errorMessage))

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

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ 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.ninecraft.booket.core.data.api.repository.AuthRepository
89
import com.ninecraft.booket.feature.home.HomeScreen
910
import com.slack.circuit.codegen.annotations.CircuitInject
1011
import com.slack.circuit.retained.rememberRetained
@@ -14,10 +15,11 @@ import dagger.assisted.Assisted
1415
import dagger.assisted.AssistedFactory
1516
import dagger.assisted.AssistedInject
1617
import dagger.hilt.android.components.ActivityRetainedComponent
18+
import kotlinx.coroutines.launch
1719

18-
@Suppress("unused")
1920
class LoginPresenter @AssistedInject constructor(
2021
@Assisted private val navigator: Navigator,
22+
private val repository: AuthRepository,
2123
) : Presenter<LoginScreen.State> {
2224

2325
@Composable
@@ -26,34 +28,35 @@ class LoginPresenter @AssistedInject constructor(
2628
var isLoading by rememberRetained { mutableStateOf(false) }
2729
var sideEffect by rememberRetained { mutableStateOf<LoginScreen.SideEffect?>(null) }
2830

29-
fun showLoading() {
30-
isLoading = true
31-
}
32-
33-
fun hideLoading() {
34-
isLoading = false
35-
}
36-
37-
fun clearSideEffect() {
38-
sideEffect = null
39-
}
40-
4131
fun handleEvent(event: LoginScreen.Event) {
4232
when (event) {
43-
is LoginScreen.Event.InitSideEffect -> clearSideEffect()
33+
is LoginScreen.Event.InitSideEffect -> {
34+
sideEffect = null
35+
}
36+
4437
is LoginScreen.Event.OnKakaoLoginButtonClick -> {
45-
showLoading()
38+
isLoading = true
4639
sideEffect = LoginScreen.SideEffect.KakaoLogin
4740
}
4841

4942
is LoginScreen.Event.LoginFailure -> {
50-
hideLoading()
43+
isLoading = false
5144
sideEffect = LoginScreen.SideEffect.ShowToast(event.message)
5245
}
5346

54-
is LoginScreen.Event.LoginSuccess -> {
55-
hideLoading()
56-
navigator.resetRoot(HomeScreen)
47+
is LoginScreen.Event.Login -> {
48+
scope.launch {
49+
repository.login(event.accessToken)
50+
.onSuccess {
51+
// TODO Token 저장
52+
navigator.resetRoot(HomeScreen)
53+
}.onFailure { exception ->
54+
sideEffect = exception.message?.let {
55+
LoginScreen.SideEffect.ShowToast(it)
56+
}
57+
}
58+
isLoading = false
59+
}
5760
}
5861
}
5962
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ data object LoginScreen : Screen {
4848
sealed interface Event : CircuitUiEvent {
4949
data object InitSideEffect : Event
5050
data object OnKakaoLoginButtonClick : Event
51-
data class LoginSuccess(val accessToken: String) : Event
51+
data class Login(val accessToken: String): Event
5252
data class LoginFailure(val message: String) : Event
5353
}
5454
}

feature/main/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,5 @@ dependencies {
2626
libs.androidx.splash,
2727

2828
libs.logger,
29-
libs.kakao.auth,
3029
)
3130
}

0 commit comments

Comments
 (0)