Skip to content

Commit

Permalink
[CHORE]#7: KakaoLoginmanager를 data module로 옮겼어요
Browse files Browse the repository at this point in the history
  • Loading branch information
flash159483 committed Jul 16, 2024
1 parent 053eb7d commit 09b74f9
Show file tree
Hide file tree
Showing 9 changed files with 80 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.bff.wespot.model.auth

data class KakaoAuthToken(
val accessToken: String,
val idToken: String?,
)
1 change: 1 addition & 0 deletions data/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ dependencies {
implementation(project(":core:network"))
implementation(project(":core:model"))
implementation(libs.junit)
implementation(libs.kakao.sdk)
}
8 changes: 8 additions & 0 deletions data/src/main/kotlin/com/bff/wespot/data/di/DataModule.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.bff.wespot.data.di

import com.bff.wespot.data.repository.auth.KakaoLoginManagerImpl
import com.bff.wespot.domain.repository.message.MessageRepository
import com.bff.wespot.data.repository.message.MessageRepositoryImpl
import com.bff.wespot.domain.repository.auth.KakaoLoginManager
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
Expand All @@ -16,4 +18,10 @@ abstract class DataModule {
abstract fun bindsMessageRepository(
messageRepository: MessageRepositoryImpl
): MessageRepository

@Binds
@Singleton
abstract fun bindsKakaoLoginManager(
kakaoLoginManagerImpl: KakaoLoginManagerImpl
): KakaoLoginManager
}
Original file line number Diff line number Diff line change
@@ -1,38 +1,52 @@
package com.bff.wespot.auth
package com.bff.wespot.data.repository.auth

import android.content.Context
import com.bff.wespot.domain.repository.auth.KakaoLoginManager
import com.bff.wespot.model.auth.KakaoAuthToken
import com.kakao.sdk.auth.model.OAuthToken
import com.kakao.sdk.common.model.ClientError
import com.kakao.sdk.common.model.ClientErrorCause
import com.kakao.sdk.user.UserApiClient
import dagger.hilt.android.qualifiers.ActivityContext
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.suspendCancellableCoroutine
import javax.inject.Inject
import kotlin.coroutines.Continuation
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException

class KakaoLoginManager @Inject constructor(
@ActivityContext private val context: Context,
) {
suspend fun loginWithKakao(): OAuthToken {
class KakaoLoginManagerImpl @Inject constructor(
@ApplicationContext private val context: Context,
): KakaoLoginManager {
override suspend fun loginWithKakao(): KakaoAuthToken {
val loginState = getKakaoLoginState()

return when (loginState) {
KaKaoLoginState.KAKAO_TALK_LOGIN -> {
try {
UserApiClient.loginWithKakaoTalk()
val token = UserApiClient.loginWithKakaoTalk()
KakaoAuthToken(
accessToken = token.accessToken,
idToken = token.idToken,
)
} catch (error: Throwable) {
if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
throw error
}

UserApiClient.loginWithKakaoAccount()
val token = UserApiClient.loginWithKakaoAccount()
KakaoAuthToken(
accessToken = token.accessToken,
idToken = token.idToken,
)
}
}

KaKaoLoginState.KAKAO_ACCOUNT_LOGIN -> {
UserApiClient.loginWithKakaoAccount()
val token = UserApiClient.loginWithKakaoAccount()
KakaoAuthToken(
accessToken = token.accessToken,
idToken = token.idToken,
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.bff.wespot.domain.repository.auth

import com.bff.wespot.model.auth.KakaoAuthToken

interface KakaoLoginManager {
suspend fun loginWithKakao(): KakaoAuthToken
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.bff.wespot.domain.repository.usecase

import com.bff.wespot.domain.repository.auth.KakaoLoginManager
import javax.inject.Inject

class KakaoLoginUseCase @Inject constructor(
val kakaoLoginManager: KakaoLoginManager,
) {
// 나중에 authrepository랑 연결될 예정
suspend inline fun invoke() {
val result = kakaoLoginManager.loginWithKakao()
println("token $result")
}
}
1 change: 0 additions & 1 deletion feature/auth/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ dependencies {
implementation(project(":core:ui"))
implementation(project(":designsystem"))

implementation(libs.kakao.sdk)
implementation(libs.bundles.androidx.compose)
implementation(libs.bundles.orbit)
implementation(libs.junit)
Expand Down
26 changes: 6 additions & 20 deletions feature/auth/src/main/kotlin/com/bff/wespot/auth/AuthScreen.kt
Original file line number Diff line number Diff line change
@@ -1,42 +1,28 @@
package com.bff.wespot.auth

import android.util.Log
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.kakao.sdk.common.model.ClientError
import com.kakao.sdk.common.model.ClientErrorCause
import kotlinx.coroutines.launch
import androidx.hilt.navigation.compose.hiltViewModel
import com.bff.wespot.auth.viewmodel.AuthViewModel

@Composable
fun AuthScreen() {
fun AuthScreen(
viewModel: AuthViewModel = hiltViewModel(),
) {
val context = LocalContext.current
val coroutineScope = rememberCoroutineScope()
val kakaoLoginManager = KakaoLoginManager(context)

Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Button(onClick = {
coroutineScope.launch {
try {
val token = kakaoLoginManager.loginWithKakao()
Log.d("AUTHSCREEN", token.toString())
} catch (e: Exception) {
if (e is ClientError && e.reason == ClientErrorCause.Cancelled) {
Log.d("AUTHSCREEN", "Login cancelled")
} else {
Log.e("AUTHSCREEN", "Login failed", e)
}
}
}
viewModel.loginWithKakao()
}) {
Text(text = "Login with Kakao")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
package com.bff.wespot.auth.viewmodel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.bff.wespot.auth.state.AuthAction
import com.bff.wespot.auth.state.AuthSideEffect
import com.bff.wespot.auth.state.AuthUiState
import com.bff.wespot.domain.repository.usecase.KakaoLoginUseCase
import com.bff.wespot.model.SchoolItem
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.syntax.simple.intent
import org.orbitmvi.orbit.syntax.simple.reduce
import org.orbitmvi.orbit.viewmodel.container
import javax.inject.Inject

class AuthViewModel : ViewModel(), ContainerHost<AuthUiState, AuthSideEffect> {
@HiltViewModel
class AuthViewModel @Inject constructor(
private val kakaoLoginUseCase: KakaoLoginUseCase,
) : ViewModel(), ContainerHost<AuthUiState, AuthSideEffect> {
override val container = container<AuthUiState, AuthSideEffect>(AuthUiState())

fun onAction(action: AuthAction) {
Expand All @@ -26,6 +34,12 @@ class AuthViewModel : ViewModel(), ContainerHost<AuthUiState, AuthSideEffect> {
}
}

fun loginWithKakao() {
viewModelScope.launch {
kakaoLoginUseCase.invoke()
}
}

private fun handleSchoolSearchChanged(text: String) = intent {
reduce {
state.copy(
Expand Down

0 comments on commit 09b74f9

Please sign in to comment.