-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[feat] 자체 로그인 api 연동 #146
[feat] 자체 로그인 api 연동 #146
Changes from 27 commits
3941db4
53dfaa0
3e74262
f3ff73c
5d1e378
60b83e9
e2ee84b
8cd03fd
65eeba6
7964d42
6d29270
99c69e1
1be8e84
58d4bb4
20b0622
b95f879
198d7bc
242ab76
cc93fdb
376e95a
1573f91
a78f9eb
c3dc2a6
194832a
c673d09
13941a2
7553fd0
6054f83
1cfede4
d346911
d51c800
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.sopt.geonppang.data.model.request | ||
|
||
import com.google.gson.annotations.SerializedName | ||
import kotlinx.serialization.Serializable | ||
|
||
@Serializable | ||
data class RequestLogin( | ||
@SerializedName("email") | ||
val email: String?, | ||
@SerializedName("password") | ||
val password: String?, | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package com.sopt.geonppang.data.model.response | ||
|
||
import com.google.gson.annotations.SerializedName | ||
import kotlinx.serialization.Serializable | ||
|
||
@Serializable | ||
data class ResponseLogin( | ||
@SerializedName("code") | ||
val code: String, | ||
@SerializedName("message") | ||
val message: String, | ||
@SerializedName("data") | ||
val data: String?, | ||
) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,10 @@ | ||
package com.sopt.geonppang.data.repository | ||
|
||
import com.sopt.geonppang.data.datasource.remote.AuthDataSource | ||
import com.sopt.geonppang.data.model.request.RequestLogin | ||
import com.sopt.geonppang.data.model.request.RequestNicknameSetting | ||
import com.sopt.geonppang.data.model.request.RequestSignup | ||
import com.sopt.geonppang.data.model.response.ResponseLogin | ||
import com.sopt.geonppang.data.model.response.ResponseLogout | ||
import com.sopt.geonppang.data.model.response.ResponseNickNameSetting | ||
import com.sopt.geonppang.data.model.response.ResponseSignup | ||
|
@@ -26,6 +28,10 @@ class AuthRepositoryImpl @Inject constructor( | |
override suspend fun logout(): Result<ResponseLogout> = | ||
runCatching { authDataSource.logout() } | ||
|
||
override suspend fun settingNickname(nickName: RequestNicknameSetting): Result<ResponseNickNameSetting> = | ||
runCatching { authDataSource.settingNickname(nickName) } | ||
override suspend fun settingNickname(nickName: RequestNicknameSetting): Result<ResponseNickNameSetting> { | ||
TODO("Not yet implemented") | ||
} | ||
|
||
override suspend fun login(responseLogin: RequestLogin): Result<Response<ResponseLogin>> = | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 나중에 말하는 거 까먹을까봐 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 앗 오키염 ! |
||
runCatching { authDataSource.login(responseLogin) } | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,59 @@ | ||
package com.sopt.geonppang.presentation.login | ||
|
||
import androidx.lifecycle.MutableLiveData | ||
import androidx.lifecycle.ViewModel | ||
import androidx.lifecycle.viewModelScope | ||
import com.sopt.geonppang.data.datasource.local.GPDataSource | ||
import com.sopt.geonppang.data.model.request.RequestLogin | ||
import com.sopt.geonppang.domain.repository.AuthRepository | ||
import dagger.hilt.android.lifecycle.HiltViewModel | ||
import kotlinx.coroutines.flow.MutableStateFlow | ||
import kotlinx.coroutines.flow.asStateFlow | ||
import kotlinx.coroutines.launch | ||
import timber.log.Timber | ||
import javax.inject.Inject | ||
|
||
@HiltViewModel | ||
class LogInViewModel @Inject constructor() : ViewModel() { | ||
val loginEmail = MutableLiveData("") | ||
val loginPassword = MutableLiveData("") | ||
class LogInViewModel @Inject constructor( | ||
private val authRepository: AuthRepository, | ||
private val gpDataSource: GPDataSource | ||
) : ViewModel() { | ||
val loginEmail = MutableStateFlow("") | ||
val loginPassword = MutableStateFlow("") | ||
private val _loginState = MutableStateFlow<Boolean?>(null) | ||
val loginState get() = _loginState.asStateFlow() | ||
|
||
fun initLogin() { | ||
_loginState.value = null | ||
} | ||
|
||
fun login() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 로그 다 지워주삼염 |
||
viewModelScope.launch { | ||
authRepository.login(RequestLogin(loginEmail.value, loginPassword.value)) | ||
.onSuccess { loginResponse -> | ||
// Log.e("로그인 상태 확인","${loginResponse}") | ||
val responseHeader = loginResponse.headers() | ||
val accessToken = responseHeader[AUTHORIZATION].toString() | ||
if (loginResponse.code() == 200) { | ||
// Log.e("로그인 성공", "${loginResponse.code()}") | ||
gpDataSource.accessToken = BEARER_PREFIX + accessToken | ||
gpDataSource.isLogin = true | ||
_loginState.value = true | ||
} | ||
if (loginResponse.code() == 400) { | ||
// Log.e("로그인 실패", "${loginResponse.code()}") | ||
_loginState.value = false | ||
} | ||
if (loginResponse.code() == 500) { | ||
// Log.e("서버 오류", "${loginResponse.code()}") | ||
} | ||
}.onFailure { throwable -> | ||
Timber.tag("로그인 실패 on Failure").e(throwable.message) | ||
} | ||
} | ||
} | ||
|
||
companion object { | ||
const val AUTHORIZATION = "Authorization" | ||
const val BEARER_PREFIX = "Bearer " | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.sopt.geonppang.presentation.login | ||
|
||
import android.os.Bundle | ||
import android.view.View | ||
import com.sopt.geonppang.R | ||
import com.sopt.geonppang.databinding.DialogBottomLoginFailBinding | ||
import com.sopt.geonppang.util.binding.BindingBottomSheetDialogFragment | ||
|
||
class LoginFailBottomDialogFragment : | ||
BindingBottomSheetDialogFragment<DialogBottomLoginFailBinding>(R.layout.dialog_bottom_login_fail) { | ||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { | ||
super.onViewCreated(view, savedInstanceState) | ||
binding.lifecycleOwner = this.viewLifecycleOwner | ||
|
||
addListeners() | ||
} | ||
|
||
private fun addListeners() { | ||
binding.btnLoginFailConfirm.setOnClickListener { | ||
dismiss() | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이거슨 왜 지웠나염,, 흑흑 다시 복구 부탁염
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
엥 이거 왜.. 쏴리염