featwip: pretty departures
This commit is contained in:
parent
ef630b6d58
commit
4e1e05495d
13 changed files with 264 additions and 37 deletions
|
|
@ -4,6 +4,7 @@ import kotlinx.coroutines.sync.Mutex
|
|||
import kotlinx.coroutines.sync.withLock
|
||||
import moe.lava.banksia.core.data.sources.route.RouteLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.route.RouteRemoteDataSource
|
||||
import moe.lava.banksia.core.model.Route
|
||||
|
||||
internal class ClientRouteRepository internal constructor(
|
||||
private val local: RouteLocalDataSource,
|
||||
|
|
@ -21,5 +22,14 @@ internal class ClientRouteRepository internal constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private val tripRouteMap = mutableMapOf<String, Route>()
|
||||
|
||||
override suspend fun get(id: String) = mutex.withLock { local.get(id)?.asModel() ?: remote.get(id) }
|
||||
override suspend fun getByTrip(tripId: String) = mutex.withLock {
|
||||
tripRouteMap[tripId]
|
||||
?: remote.getByTrip(tripId).also {
|
||||
local.save(it)
|
||||
tripRouteMap[tripId] = it
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,5 +7,6 @@ import moe.lava.banksia.core.room.entity.asEntity
|
|||
internal class RouteLocalDataSource(private val dao: RouteDao) {
|
||||
suspend fun get(id: String) = dao.get(id)
|
||||
suspend fun getAll() = dao.getAll()
|
||||
suspend fun getByTrip(tripId: String) = dao.getByTrip(tripId)
|
||||
suspend fun save(vararg routes: Route) = dao.insertOrReplaceAll(*routes.map { it.asEntity() }.toTypedArray())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,5 +7,6 @@ import moe.lava.banksia.core.model.Route
|
|||
|
||||
internal class RouteRemoteDataSource(val client: HttpClient) {
|
||||
suspend fun get(id: String) = client.get("routes/${id}").body<Route>()
|
||||
suspend fun getByTrip(tripId: String) = client.get("routes/by_trip/${tripId}").body<Route>()
|
||||
suspend fun getAll() = client.get("routes").body<List<Route>>()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package moe.lava.banksia.core.data.repositories
|
|||
import moe.lava.banksia.core.model.Route
|
||||
|
||||
interface RouteRepository {
|
||||
suspend fun get(id: String): Route
|
||||
suspend fun get(id: String): Route?
|
||||
suspend fun getByTrip(tripId: String): Route?
|
||||
suspend fun getAll(): List<Route>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ interface RouteDao {
|
|||
@Query("DELETE FROM Route")
|
||||
suspend fun deleteAll()
|
||||
|
||||
@Query("SELECT * FROM Route INNER JOIN Trip on Route.id == Trip.routeId WHERE Trip.id == :tripId")
|
||||
suspend fun getByTrip(tripId: String): RouteEntity?
|
||||
|
||||
@Query("""
|
||||
SELECT Stop.* FROM Stop
|
||||
INNER JOIN StopTime ON StopTime.stopId == Stop.id
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue