diff --git a/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt b/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt index 2a5284d..80fe888 100644 --- a/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt +++ b/app/src/main/java/ru/myitschool/work/data/remote/LoginApi.kt @@ -6,6 +6,7 @@ import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.Header import retrofit2.http.PATCH +import retrofit2.http.PUT import retrofit2.http.Path import retrofit2.http.Query @@ -22,6 +23,17 @@ interface LoginApi { @Query("login") login: String ): Response + @PUT("ban") + suspend fun ban( + @Query("login") login: String + ): Response + + @PUT("unban") + suspend fun unban( + @Query("login") login: String + ): Response + + @PATCH("{login}/open") suspend fun open(@Path("login") login: String, @Body request: OpenWithCodeRequest): Response } diff --git a/app/src/main/java/ru/myitschool/work/ui/admin/AdminFragment.kt b/app/src/main/java/ru/myitschool/work/ui/admin/AdminFragment.kt index 03e2427..92d16ed 100644 --- a/app/src/main/java/ru/myitschool/work/ui/admin/AdminFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/admin/AdminFragment.kt @@ -42,7 +42,6 @@ class AdminFragment : Fragment(R.layout.fragment_admin) { binding.loginadmin.addTextChangedListener(TextChangedListener { viewModel.onUsernameChanged(it) }) - subscribe() binding.adminName.text = user binding.find.setOnClickListener { login(user, password, binding.loginadmin.text.toString()) @@ -63,41 +62,36 @@ class AdminFragment : Fragment(R.layout.fragment_admin) { if (state.photo.isNotEmpty()) { picasso.load(state.photo).into(binding.photoAdmin) } + if (state.isBanned){ + binding.ban.text = "разблокировать" + }else{ + binding.ban.text = "заблокировать" + } + binding.ban.setOnClickListener { + viewModel.banPerson(username, state.isBanned, loginPerson){ + if (state.isBanned){ + binding.ban.text = "разблокировать" + }else{ + binding.ban.text = "заблокировать" + } + } + } binding.fullnameAdmin.text = state.fullName binding.positionAdmin.text = state.position binding.lastEntryAdmin.text = state.lastVisit + binding.errorAdmin.text = state.error setError(state.error) } } } - private fun subscribe() { -// viewModel.state.collectWhenStarted(this) { state -> -// binding.login.isEnabled = state.isLoginEnabled -// if (state.error != null) { -// binding.error.visibility = View.VISIBLE -// binding.error.text = state.error -// } else { -// binding.error.visibility = View.GONE -// } -// } -// viewModel.savedUsername.collectWhenStarted(this) { username -> -// viewModel.savedPassword.collectWhenStarted(this) { password -> -// if (!username.isNullOrBlank() && !password.isNullOrBlank()) { -// login(username, password) -// } -// } -// } - println("akjshdfg") - } private fun setError(error: String?) { val showError = error != null - val views = listOf(binding.fullnameAdmin, binding.positionAdmin, binding.lastEntryAdmin, binding.photoAdmin) + val views = listOf(binding.fullnameAdmin, binding.ban, binding.positionAdmin, binding.lastEntryAdmin, binding.photoAdmin) views.forEach { it.visibility = if (showError) View.GONE else View.VISIBLE} binding.errorAdmin.visibility = if (showError) View.VISIBLE else View.GONE - binding.block.visibility = if (showError) View.GONE else View.VISIBLE binding.errorAdmin.text = error ?: "" } diff --git a/app/src/main/java/ru/myitschool/work/ui/admin/AdminState.kt b/app/src/main/java/ru/myitschool/work/ui/admin/AdminState.kt index 4c868c1..c88fa9b 100644 --- a/app/src/main/java/ru/myitschool/work/ui/admin/AdminState.kt +++ b/app/src/main/java/ru/myitschool/work/ui/admin/AdminState.kt @@ -9,5 +9,7 @@ data class AdminMainState( val photo: String = "", val position: String = "", val lastVisit: String = "", + val role: String = "", + val isBanned: Boolean = false, val error: String? = null ) diff --git a/app/src/main/java/ru/myitschool/work/ui/admin/AdminViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/admin/AdminViewModel.kt index d5e6b6e..50ad728 100644 --- a/app/src/main/java/ru/myitschool/work/ui/admin/AdminViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/admin/AdminViewModel.kt @@ -56,6 +56,8 @@ class AdminViewModel @Inject constructor( photo = personInfo.photo, position = personInfo.position, lastVisit = dfo.format(dfi.parse(personInfo.lastVisit)!!), + role = personInfo.role, + isBanned = personInfo.isBanned, error = null ) } @@ -81,6 +83,34 @@ class AdminViewModel @Inject constructor( } } + fun banPerson(username: String, ban : Boolean, loginPerson: String, onSuccess: () -> Unit) { + viewModelScope.launch { + try { + when(ban){ + false -> loginApi.ban(loginPerson) + true -> loginApi.unban(loginPerson) + } + onSuccess() + } catch (httpException: HttpException) { + try { + httpException.response()?.errorBody()?.string()?.let { errorString -> + val gson = GsonBuilder().create() + val errorDto = gson.fromJson(errorString, ErrorDto::class.java) + _state.update { + AdminMainState( + error = errorDto.error + ) + } + } + } catch (e: Exception) { + _state.update { AdminMainState(error = httpException.message()) } + } + } catch (e: Exception) { + _state.update { AdminMainState(error = "Unknown error: ${e.message}") } + } + } + } + fun onUsernameChanged(username: String) = _stateL.update { it.copy(isLoginEnabled = isUsernameValid(username), error = null) } diff --git a/app/src/main/res/layout/fragment_admin.xml b/app/src/main/res/layout/fragment_admin.xml index fae1ae7..a01318a 100644 --- a/app/src/main/res/layout/fragment_admin.xml +++ b/app/src/main/res/layout/fragment_admin.xml @@ -18,7 +18,7 @@ app:layout_constraintVertical_bias="0.089" />