diff --git a/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt b/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt index 271ca96..22341bd 100644 --- a/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt +++ b/app/src/main/java/ru/myitschool/work/data/model/BookingInfoResponse.kt @@ -1,11 +1,10 @@ package ru.myitschool.work.data.model +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -@Serializable -data class BookingInfoResponse( - val dates: Map>? = null // can be nil because web api -) + +typealias BookingInfoResponse = Map> @Serializable data class PlaceInfo( diff --git a/app/src/main/java/ru/myitschool/work/data/repo/BookRepository.kt b/app/src/main/java/ru/myitschool/work/data/repo/BookRepository.kt index eb44a43..37cd267 100644 --- a/app/src/main/java/ru/myitschool/work/data/repo/BookRepository.kt +++ b/app/src/main/java/ru/myitschool/work/data/repo/BookRepository.kt @@ -1,12 +1,12 @@ package ru.myitschool.work.data.repo -import ru.myitschool.work.data.model.BookingInfoResponse +import ru.myitschool.work.data.model.PlaceInfo import ru.myitschool.work.data.source.AuthException import ru.myitschool.work.data.source.NetworkDataSource class BookRepository(private val authRepository: AuthRepository) { - suspend fun getAvailableBookings(): Result { + suspend fun getAvailableBookings(): Result>> { val code = authRepository.getCurrentCode() return if (code != null) { NetworkDataSource.getBookingInfo(code) diff --git a/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt b/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt index 92a78ec..9330eaf 100644 --- a/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt +++ b/app/src/main/java/ru/myitschool/work/data/source/NetworkDataSource.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.withContext import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import ru.myitschool.work.core.Constants -import ru.myitschool.work.data.model.BookingInfoResponse +import ru.myitschool.work.data.model.PlaceInfo import ru.myitschool.work.data.model.UserInfoResponse import java.net.ConnectException import java.net.SocketTimeoutException @@ -133,26 +133,24 @@ object NetworkDataSource { } } - suspend fun getBookingInfo(code: String): Result = withContext(Dispatchers.IO) { + suspend fun getBookingInfo(code: String): Result>> = withContext(Dispatchers.IO) { return@withContext runCatching { val response = client.get(getUrl(code, Constants.BOOKING_URL)) - - when (response.status) { HttpStatusCode.OK -> { try { - val body = response.body() + val body = response.body>>() println("Parsed response: $body") body } catch (e: Exception) { println("Parsing error: ${e.message}") - BookingInfoResponse(emptyMap()) + emptyMap() } } HttpStatusCode.NoContent -> { println("No content received") - BookingInfoResponse(emptyMap()) + emptyMap() } else -> { val errorMsg = response.body().ifBlank { @@ -163,6 +161,7 @@ object NetworkDataSource { } } } + suspend fun book(code: String, date: String, placeId: Int): Result = withContext(Dispatchers.IO) { return@withContext runCatching { val response = client.post(getUrl(code, Constants.BOOK_URL)) { diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt index 08aff5a..9c55ab1 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/book/BookViewModel.kt @@ -11,6 +11,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch +import ru.myitschool.work.data.model.PlaceInfo import ru.myitschool.work.data.repo.AuthRepository import ru.myitschool.work.data.repo.BookRepository import java.text.SimpleDateFormat @@ -71,7 +72,7 @@ class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { bookRepo.getAvailableBookings().fold( onSuccess = { response -> - val datesMap = response.dates ?: emptyMap() + val datesMap = response ?: emptyMap() val dateItems = datesMap.entries .sortedBy { (date, _) -> parseDate(date) } @@ -101,7 +102,6 @@ class BookViewModel(private val bookRepo: BookRepository) : ViewModel() { } }, onFailure = { error -> - println("Error loading bookings: ${error.message}") _uiState.update { BookState.Data( error = error.message ?: "Ошибка загрузки данных" diff --git a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt index 7003cad..763fc54 100644 --- a/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt +++ b/app/src/main/java/ru/myitschool/work/ui/screen/main/MainScreen.kt @@ -113,6 +113,14 @@ fun MainScreen( Column( modifier = Modifier.fillMaxSize() ) { + Text( + text = "", + color = Color.Red, + modifier = Modifier + .testTag(TestIds.Main.ERROR) + .height(0.dp) + ) + Card( modifier = Modifier .fillMaxWidth()