feat: Introduce Result type and update UI states

This commit introduces a generic `Result` sealed interface to represent success, error, and loading states for asynchronous operations. It also updates the home screen UI and ViewModel to utilize this `Result` type for displaying different states.

Key changes:
- Added `Result.kt` in `core:util` defining the `Result` sealed interface and an `asResult()` Flow extension.
- Updated `HomeScreenViewModel` to use `asResult()` and map the `ObserveAirportsUseCase` output to `HomeUiState` (Loading, Success, Error).
- Modified `HomeUiState` to be a sealed interface with `Loading`, `Success`, and `Error` subtypes.
- Updated `HomeScreen` to handle different `HomeUiState` values and display appropriate UI (Loading text, Error text, or list of airports).
- Added `core.util` dependency to `ui:home`.
- Updated Moshi and Retrofit Moshi converter dependencies in `model/data/api/build.gradle.kts` and `gradle/libs.versions.toml`.
- Added `moshi` and `moshiKotlinCodegen` versions to `gradle/libs.versions.toml`.
- Removed `converter-moshi` and added `retrofit-converter-moshi` in `gradle/libs.versions.toml`.
- Added `ksp(libs.moshi.kotlin.codegen)` to `model/data/api/build.gradle.kts`.
- Added `INTERNET` permission to `app/src/main/AndroidManifest.xml`.
- Updated `ObserveAirportsUseCaseImpl` to use `cacheKey` when setting airports info and to fetch airports for "pl" (lowercase).
- Added `.editorconfig` file with Kotlin trailing comma settings.
This commit is contained in:
2025-06-13 22:12:05 +02:00
parent 9e18987aaf
commit a7f8ca75be
9 changed files with 63 additions and 26 deletions

View File

@ -15,9 +15,9 @@ internal class ObserveAirportsUseCaseImpl @Inject constructor(
private val airportsDatasource: AirportsDatasource,
) : ObserveAirportsUseCase {
override fun invoke(): Flow<List<AirportInfo>?> = loadData(
onCacheInvalidated = {
val response = airportService.getAirports("PL")
airportsDatasource.setAirportsInfo(response, "PL")
onCacheInvalidated = { cacheKey ->
val response = airportService.getAirports("pl")
airportsDatasource.setAirportsInfo(response, cacheKey)
},
observeCache = {
airportsDatasource.airports