diff --git a/app/src/main/java/ru/myitschool/work/api/ApiService.kt b/app/src/main/java/ru/myitschool/work/api/ApiService.kt index 562c4f3..9328037 100644 --- a/app/src/main/java/ru/myitschool/work/api/ApiService.kt +++ b/app/src/main/java/ru/myitschool/work/api/ApiService.kt @@ -3,28 +3,44 @@ package ru.myitschool.work.api import retrofit2.Response import retrofit2.http.Body import retrofit2.http.GET -import retrofit2.http.Header +import retrofit2.http.PATCH import retrofit2.http.POST import retrofit2.http.Path interface ApiService { - @GET("api/{login}/auth") + // Метод для аутентификации + @POST("/api/auth") // Изменено на POST и путь к аутентификации suspend fun authenticate( - @Path("login") login: String, - @Header("Authorization") authorization: String // Добавляем заголовок Authorization + @Body payload: AuthRequest // Передаем объект с логином и паролем ): Response // Возвращаем UserAuthResponse - @GET("api/{login}/info") + @GET("/api/{login}/info") // Получение информации о пользователе suspend fun getUserInfo(@Path("login") login: String): Response> - @POST("api/employee/toggleAccess") + @GET("/api/employee/{login}") // Получение информации о сотруднике + suspend fun getEmployeeInfo(@Path("login") login: String): Response + + @PATCH("/api/open") // Открыть дверь + suspend fun openDoor(@Body request: OpenDoorRequest): Response + + @POST("/api/employee/toggleAccess") // Метод для блокировки/разблокировки доступа suspend fun toggleAccess(@Body request: ToggleAccessRequest): Response - // Метод для получения информации о сотруднике - @GET("api/employee/{login}") - suspend fun getEmployeeInfo(@Path("login") login: String): Response + @GET("/api/workers") // Получить всех сотрудников + suspend fun getAllWorkers(): Response> } +// Модель данных для запроса аутентификации +data class AuthRequest( + val login: String, + val password: String // Поле для пароля +) + +// Модель данных для ответа аутентификации +data class UserAuthResponse( + val role: String // Добавляем поле для роли +) + // Модель данных для информации о сотруднике data class EmployeeData( val name: String, @@ -34,11 +50,12 @@ data class EmployeeData( // Модель данных для запроса блокировки/разблокировки доступа data class ToggleAccessRequest( - val login: String, - val action: String // "block" или "unblock" + val login: String, // Логин сотрудника + val action: String // Действие: "block" или "unblock" ) -// Модель данных для ответа аутентификации -data class UserAuthResponse( - val role: String // Добавляем поле для роли +// Модель данных для запроса открытия двери +data class OpenDoorRequest( + val login: String, // Логин сотрудника + val value: Long // Код для открытия двери ) \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/core/Constants.kt b/app/src/main/java/ru/myitschool/work/core/Constants.kt index f24b5bb..7a5d665 100644 --- a/app/src/main/java/ru/myitschool/work/core/Constants.kt +++ b/app/src/main/java/ru/myitschool/work/core/Constants.kt @@ -1,5 +1,5 @@ package ru.myitschool.work.core // БЕРИТЕ И ИЗМЕНЯЙТЕ ХОСТ ТОЛЬКО ЗДЕСЬ И НЕ БЕРИТЕ ИЗ ДРУГИХ МЕСТ. ФАЙЛ ПЕРЕМЕЩАТЬ НЕЛЬЗЯ object Constants { - const val SERVER_ADDRESS = "const val SERVER_ADDRESS = \"http://localhost:8090\"\n" + const val SERVER_ADDRESS = "const val SERVER_ADDRESS = \"http://localhost:8080\"\n" } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt index abdcbb0..a62b768 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt @@ -13,6 +13,7 @@ import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import ru.myitschool.work.SessionManager import ru.myitschool.work.api.ApiService +import ru.myitschool.work.api.AuthRequest import ru.myitschool.work.api.UserAuthResponse import ru.myitschool.work.core.Constants import javax.inject.Inject @@ -36,8 +37,8 @@ class LoginViewModel @Inject constructor( if (isValidUsername(username)) { viewModelScope.launch { try { - val credentials = Credentials.basic(username, password) // Создаем Basic Auth заголовок - val response = apiService.authenticate(username, credentials) // Передаем заголовок в запрос + val payload = AuthRequest(username, password) // Создаем объект запроса + val response = apiService.authenticate(payload) // Вызываем метод аутентификации if (response.isSuccessful) { val userAuthResponse = response.body() // Получаем ответ с ролью пользователя userAuthResponse?.let { @@ -45,13 +46,10 @@ class LoginViewModel @Inject constructor( SessionManager.userRole = it.role // Сохраняем роль } _state.value = LoginState(success = true, userAuthResponse = userAuthResponse) - } else if (response.code() == 503) { // Пример кода для техработ - _state.value = LoginState(maintenance = true) } else { _state.value = LoginState(error = "Ошибка авторизации") } } catch (e: Exception) { - // Логирование ошибки e.printStackTrace() _state.value = LoginState(error = "Ошибка сети. Проверьте подключение к интернету.") } diff --git a/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResult.kt b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResult.kt index f607c58..327e9ad 100644 --- a/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResult.kt +++ b/app/src/main/java/ru/myitschool/work/ui/qr/result/QrResult.kt @@ -55,11 +55,19 @@ class QrResult : Fragment(R.layout.fragment_qr_scan_result) { private fun sendRequestToServer(qrData: String) { lifecycleScope.launch { try { - val response = apiService.openDoor(SessionManager.userLogin, OpenDoorRequest(qrData)) - if (response.isSuccessful) { - binding.result.text = "Успешно/Success" + // Проверяем, что userLogin не равен null + val login = SessionManager.userLogin + if (login != null) { + // Создаем объект OpenDoorRequest с логином и кодом + val openDoorRequest = OpenDoorRequest(login, qrData.toLong()) // Преобразуем qrData в Long, если это необходимо + val response = apiService.openDoor(openDoorRequest) // Теперь передаем только openDoorRequest + if (response.isSuccessful) { + binding.result.text = "Успешно/Success" + } else { + binding.result.text = "Что-то пошло не так/Something wrong" + } } else { - binding.result.text = "Что-то пошло не так/Something wrong" + binding.result.text = "Пользователь не авторизован/Unauthorized user" } } catch (e: Exception) { binding.result.text = "Что-то пошло не так/Something wrong"