From 3da4b99cc0ad3befdb6b94798516e6cfc4d9f039 Mon Sep 17 00:00:00 2001
From: Terebov_Maksim <terebov07@mail.ru>
Date: Wed, 19 Feb 2025 15:01:42 +0300
Subject: [PATCH] day2_commit_12_MEGAFIX_MEEEEEGAAPI

---
 .../java/ru/myitschool/work/api/ApiService.kt | 45 +++++++++++++------
 .../java/ru/myitschool/work/core/Constants.kt |  2 +-
 .../work/ui/login/LoginViewModel.kt           |  8 ++--
 .../myitschool/work/ui/qr/result/QrResult.kt  | 16 +++++--
 4 files changed, 47 insertions(+), 24 deletions(-)

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> // Возвращаем UserAuthResponse
 
-    @GET("api/{login}/info")
+    @GET("/api/{login}/info") // Получение информации о пользователе
     suspend fun getUserInfo(@Path("login") login: String): Response<Map<String, Any>>
 
-    @POST("api/employee/toggleAccess")
+    @GET("/api/employee/{login}") // Получение информации о сотруднике
+    suspend fun getEmployeeInfo(@Path("login") login: String): Response<EmployeeData>
+
+    @PATCH("/api/open") // Открыть дверь
+    suspend fun openDoor(@Body request: OpenDoorRequest): Response<String>
+
+    @POST("/api/employee/toggleAccess") // Метод для блокировки/разблокировки доступа
     suspend fun toggleAccess(@Body request: ToggleAccessRequest): Response<Unit>
 
-    // Метод для получения информации о сотруднике
-    @GET("api/employee/{login}")
-    suspend fun getEmployeeInfo(@Path("login") login: String): Response<EmployeeData>
+    @GET("/api/workers") // Получить всех сотрудников
+    suspend fun getAllWorkers(): Response<List<EmployeeData>>
 }
 
+// Модель данных для запроса аутентификации
+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"