day2_commit_12_MEGAFIX_MEEEEEGAAPI
This commit is contained in:
parent
c5be8a2114
commit
3da4b99cc0
@ -3,28 +3,44 @@ package ru.myitschool.work.api
|
|||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.Header
|
import retrofit2.http.PATCH
|
||||||
import retrofit2.http.POST
|
import retrofit2.http.POST
|
||||||
import retrofit2.http.Path
|
import retrofit2.http.Path
|
||||||
|
|
||||||
interface ApiService {
|
interface ApiService {
|
||||||
@GET("api/{login}/auth")
|
// Метод для аутентификации
|
||||||
|
@POST("/api/auth") // Изменено на POST и путь к аутентификации
|
||||||
suspend fun authenticate(
|
suspend fun authenticate(
|
||||||
@Path("login") login: String,
|
@Body payload: AuthRequest // Передаем объект с логином и паролем
|
||||||
@Header("Authorization") authorization: String // Добавляем заголовок Authorization
|
|
||||||
): Response<UserAuthResponse> // Возвращаем UserAuthResponse
|
): Response<UserAuthResponse> // Возвращаем UserAuthResponse
|
||||||
|
|
||||||
@GET("api/{login}/info")
|
@GET("/api/{login}/info") // Получение информации о пользователе
|
||||||
suspend fun getUserInfo(@Path("login") login: String): Response<Map<String, Any>>
|
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>
|
suspend fun toggleAccess(@Body request: ToggleAccessRequest): Response<Unit>
|
||||||
|
|
||||||
// Метод для получения информации о сотруднике
|
@GET("/api/workers") // Получить всех сотрудников
|
||||||
@GET("api/employee/{login}")
|
suspend fun getAllWorkers(): Response<List<EmployeeData>>
|
||||||
suspend fun getEmployeeInfo(@Path("login") login: String): Response<EmployeeData>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Модель данных для запроса аутентификации
|
||||||
|
data class AuthRequest(
|
||||||
|
val login: String,
|
||||||
|
val password: String // Поле для пароля
|
||||||
|
)
|
||||||
|
|
||||||
|
// Модель данных для ответа аутентификации
|
||||||
|
data class UserAuthResponse(
|
||||||
|
val role: String // Добавляем поле для роли
|
||||||
|
)
|
||||||
|
|
||||||
// Модель данных для информации о сотруднике
|
// Модель данных для информации о сотруднике
|
||||||
data class EmployeeData(
|
data class EmployeeData(
|
||||||
val name: String,
|
val name: String,
|
||||||
@ -34,11 +50,12 @@ data class EmployeeData(
|
|||||||
|
|
||||||
// Модель данных для запроса блокировки/разблокировки доступа
|
// Модель данных для запроса блокировки/разблокировки доступа
|
||||||
data class ToggleAccessRequest(
|
data class ToggleAccessRequest(
|
||||||
val login: String,
|
val login: String, // Логин сотрудника
|
||||||
val action: String // "block" или "unblock"
|
val action: String // Действие: "block" или "unblock"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Модель данных для ответа аутентификации
|
// Модель данных для запроса открытия двери
|
||||||
data class UserAuthResponse(
|
data class OpenDoorRequest(
|
||||||
val role: String // Добавляем поле для роли
|
val login: String, // Логин сотрудника
|
||||||
|
val value: Long // Код для открытия двери
|
||||||
)
|
)
|
@ -1,5 +1,5 @@
|
|||||||
package ru.myitschool.work.core
|
package ru.myitschool.work.core
|
||||||
// БЕРИТЕ И ИЗМЕНЯЙТЕ ХОСТ ТОЛЬКО ЗДЕСЬ И НЕ БЕРИТЕ ИЗ ДРУГИХ МЕСТ. ФАЙЛ ПЕРЕМЕЩАТЬ НЕЛЬЗЯ
|
// БЕРИТЕ И ИЗМЕНЯЙТЕ ХОСТ ТОЛЬКО ЗДЕСЬ И НЕ БЕРИТЕ ИЗ ДРУГИХ МЕСТ. ФАЙЛ ПЕРЕМЕЩАТЬ НЕЛЬЗЯ
|
||||||
object Constants {
|
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"
|
||||||
}
|
}
|
@ -13,6 +13,7 @@ import retrofit2.Retrofit
|
|||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
import ru.myitschool.work.SessionManager
|
import ru.myitschool.work.SessionManager
|
||||||
import ru.myitschool.work.api.ApiService
|
import ru.myitschool.work.api.ApiService
|
||||||
|
import ru.myitschool.work.api.AuthRequest
|
||||||
import ru.myitschool.work.api.UserAuthResponse
|
import ru.myitschool.work.api.UserAuthResponse
|
||||||
import ru.myitschool.work.core.Constants
|
import ru.myitschool.work.core.Constants
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -36,8 +37,8 @@ class LoginViewModel @Inject constructor(
|
|||||||
if (isValidUsername(username)) {
|
if (isValidUsername(username)) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
try {
|
try {
|
||||||
val credentials = Credentials.basic(username, password) // Создаем Basic Auth заголовок
|
val payload = AuthRequest(username, password) // Создаем объект запроса
|
||||||
val response = apiService.authenticate(username, credentials) // Передаем заголовок в запрос
|
val response = apiService.authenticate(payload) // Вызываем метод аутентификации
|
||||||
if (response.isSuccessful) {
|
if (response.isSuccessful) {
|
||||||
val userAuthResponse = response.body() // Получаем ответ с ролью пользователя
|
val userAuthResponse = response.body() // Получаем ответ с ролью пользователя
|
||||||
userAuthResponse?.let {
|
userAuthResponse?.let {
|
||||||
@ -45,13 +46,10 @@ class LoginViewModel @Inject constructor(
|
|||||||
SessionManager.userRole = it.role // Сохраняем роль
|
SessionManager.userRole = it.role // Сохраняем роль
|
||||||
}
|
}
|
||||||
_state.value = LoginState(success = true, userAuthResponse = userAuthResponse)
|
_state.value = LoginState(success = true, userAuthResponse = userAuthResponse)
|
||||||
} else if (response.code() == 503) { // Пример кода для техработ
|
|
||||||
_state.value = LoginState(maintenance = true)
|
|
||||||
} else {
|
} else {
|
||||||
_state.value = LoginState(error = "Ошибка авторизации")
|
_state.value = LoginState(error = "Ошибка авторизации")
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
// Логирование ошибки
|
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
_state.value = LoginState(error = "Ошибка сети. Проверьте подключение к интернету.")
|
_state.value = LoginState(error = "Ошибка сети. Проверьте подключение к интернету.")
|
||||||
}
|
}
|
||||||
|
@ -55,11 +55,19 @@ class QrResult : Fragment(R.layout.fragment_qr_scan_result) {
|
|||||||
private fun sendRequestToServer(qrData: String) {
|
private fun sendRequestToServer(qrData: String) {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
try {
|
try {
|
||||||
val response = apiService.openDoor(SessionManager.userLogin, OpenDoorRequest(qrData))
|
// Проверяем, что userLogin не равен null
|
||||||
if (response.isSuccessful) {
|
val login = SessionManager.userLogin
|
||||||
binding.result.text = "Успешно/Success"
|
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 {
|
} else {
|
||||||
binding.result.text = "Что-то пошло не так/Something wrong"
|
binding.result.text = "Пользователь не авторизован/Unauthorized user"
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
binding.result.text = "Что-то пошло не так/Something wrong"
|
binding.result.text = "Что-то пошло не так/Something wrong"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user