bugfix, added login exception logic

This commit is contained in:
Izlydov 2025-02-20 12:55:20 +03:00
parent bfb54c8e27
commit 9cc7462ad2
8 changed files with 15 additions and 62 deletions

View File

@ -22,7 +22,6 @@ class GateServiceST {
}
private val gateRepository: GateRepository = GateRepository()
suspend fun openDoor(code: String): Result<Int> {
Log.d("1234", UserServiceST.getInstance().getTokenPair().accessToken)
return gateRepository.openDoor(UserServiceST.getInstance().getTokenPair().accessToken, code = code)
return gateRepository.openDoor(UserServiceST.getInstance().getTokenPair()?.accessToken!!, code = code)
}
}

View File

@ -28,7 +28,7 @@ class VisitServiceST {
if (!UserServiceST.getInstance().hasTokens()) {
throw RuntimeException("access token is null")
}
return visitRepository.getLastVisitsByLogin(pageNum, pageSize, UserServiceST.getInstance().getTokenPair().accessToken, login).map { pagingDto -> pagingDto.content }
return visitRepository.getLastVisitsByLogin(pageNum, pageSize, UserServiceST.getInstance().getTokenPair()!!.accessToken, login).map { pagingDto -> pagingDto.content }
}
suspend fun getMyLastVisits(pageNum: Int,
pageSize: Int): Result<List<VisitDto>> {
@ -39,7 +39,7 @@ class VisitServiceST {
return visitRepository.getMyLastVisits(
pageNum = pageNum,
pageSize = pageSize,
token = UserServiceST.getInstance().getTokenPair().accessToken
token = UserServiceST.getInstance().getTokenPair()!!.accessToken
).map { pagingDto -> pagingDto.content }
}
}

View File

@ -41,8 +41,8 @@ class UserServiceST(
}
}
}
fun getTokenPair(): AuthTokenPair {
return tokenManager.authTokenPair!!
fun getTokenPair(): AuthTokenPair? {
return tokenManager.authTokenPair
}
fun hasTokens(): Boolean {
return tokenManager.hasTokens()

View File

@ -1,6 +1,7 @@
package com.displaynone.acss.components.auth.models.user.repository
import android.util.Log
import com.bumptech.glide.load.HttpException
import com.displaynone.acss.components.auth.models.AuthTokenPair
import com.displaynone.acss.config.Constants.serverUrl
import com.displaynone.acss.config.Network
@ -45,16 +46,14 @@ class UserRepository(
setBody(UserLoginDto(login, password))
}
if (result.status != HttpStatusCode.OK) {
error("Status ${result.status}: ${result.body<String>()}")
error(result.status)
}
// val gson = Gson()
// val tokenPair = gson.fromJson(result.bodyAsText(), AuthTokenPair::class.java)
Log.d("UserRepository", result.bodyAsText())
// result.body()
val tokenPair = Json.decodeFromString<AuthTokenPair>(result.bodyAsText())
Result.success(tokenPair)
}.getOrElse { exception ->
Result.failure(exception)
tokenPair
}
}
suspend fun openDoor(token: String, code: String): Result<Int> = withContext(Dispatchers.IO){

View File

@ -20,6 +20,6 @@ class InitServiceST {
}
}
suspend fun ping(): Result<Boolean> {
return initRepository.ping(UserServiceST.getInstance().getTokenPair().accessToken)
return initRepository.ping()
}
}

View File

@ -16,13 +16,10 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class InitRepository {
suspend fun ping(token: String): Result<Boolean> = withContext(
suspend fun ping(): Result<Boolean> = withContext(
Dispatchers.IO){
runCatching {
val result = Network.client.get("$serverUrl/api/utils/ping") {
headers {
append(HttpHeaders.Authorization, "Bearer $token")
}
}
result.status == HttpStatusCode.OK

View File

@ -28,17 +28,16 @@ class AuthFragment: Fragment(R.layout.fragment_auth) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = FragmentAuthBinding.bind(view)
setupLoginButton()
viewModel.action.collectWithLifecycle(this) { action ->
if (action is Action.GotoProfile) {
blockLoginButton() // FIXME() При двойном нажатии вылетает с ошибкой
navigateTo(view, R.id.action_authFragment_to_profileFragment)
}
}
viewModel.errorState.collectWithLifecycle(this) { errorMessage ->
errorMessage?.let {
viewModel.errorState.collectWithLifecycle(this) { errorStatus ->
errorStatus?.let {
Toast.makeText(requireContext(), it, Toast.LENGTH_SHORT).show()
binding.errorTitle.text = errorMessage
binding.errorTitle.text = errorStatus
binding.errorTitle.visibility = View.VISIBLE
}
}
@ -49,49 +48,6 @@ class AuthFragment: Fragment(R.layout.fragment_auth) {
private fun blockLoginButton() {
binding.next.isEnabled = false
}
private fun setupLoginButton() {
binding.login.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
@SuppressLint("ResourceAsColor")
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
binding.error.visibility = View.GONE
// val username = s.toString()
// val valid = isUsernameValid(username)
//
// if (valid) {
// binding.hint.visibility = View.INVISIBLE
// }else{
// binding.login.error = getString(R.string.login_hint)
// }
// binding.hint.visibility = if(valid) View.INVISIBLE else View.VISIBLE
// binding.next.isEnabled = valid
}
override fun afterTextChanged(s: Editable?) {}
})
// binding.password.addTextChangedListener(object : TextWatcher {
// override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
// @SuppressLint("ResourceAsColor")
// override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
// binding.error.visibility = View.GONE
// val username = s.toString()
// val valid = isPasswordValid(username)
//
// binding.hint.visibility = if(valid) View.INVISIBLE else View.VISIBLE
// if (!valid){
// val errorMessage = getPasswordValidError(s.toString())
// binding.password.setError(errorMessage)
// }
// binding.next.isEnabled = valid
// val color = if (valid) R.color.primary else R.color.secondary
// binding.next.backgroundTintList = ContextCompat.getColorStateList(requireContext(), color)
// }
//
// override fun afterTextChanged(s: Editable?) {}
// })
}
private fun getPasswordValidError(password: String): String {
if (password.length < 8) {
return "LenError"

View File

@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.launch
import kotlin.reflect.typeOf
class AuthViewModel(): ViewModel() {
private val _action = Channel<Action>(
@ -28,6 +29,7 @@ class AuthViewModel(): ViewModel() {
UserServiceST.getInstance().login(login, password).fold(
onSuccess = { openProfile() },
onFailure = { error ->
Log.d("AuthViewModel", error::class.simpleName.toString())
Log.e("AuthViewModel", "Login failed: ${error.message ?: "Unknown error"}")
_errorState.value = error.message ?: "Ошибка входа"
}