feat(server): store and expose last updated date of gtfs data
This commit is contained in:
parent
25e5282ea8
commit
5535034fd7
8 changed files with 430 additions and 2 deletions
|
|
@ -7,6 +7,7 @@ val CommonModules = module {
|
|||
includes(PlatformModule)
|
||||
|
||||
single { Database.build(get<PlatformDatabaseBuilder>().getBuilder()) }
|
||||
single { get<Database>().versionMetadataDao }
|
||||
single { get<Database>().routeDao }
|
||||
single { get<Database>().shapeDao }
|
||||
single { get<Database>().stopDao }
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
package moe.lava.banksia.model
|
||||
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
@Serializable
|
||||
data class VersionMetadata(
|
||||
val type: String,
|
||||
val lastUpdated: Long,
|
||||
)
|
||||
|
|
@ -7,6 +7,7 @@ import androidx.sqlite.driver.bundled.BundledSQLiteDriver
|
|||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.IO
|
||||
import moe.lava.banksia.room.converter.RouteTypeConverter
|
||||
import moe.lava.banksia.room.dao.VersionMetadataDao
|
||||
import moe.lava.banksia.room.dao.RouteDao
|
||||
import moe.lava.banksia.room.dao.ShapeDao
|
||||
import moe.lava.banksia.room.dao.StopDao
|
||||
|
|
@ -17,23 +18,27 @@ import moe.lava.banksia.room.entity.ShapeEntity
|
|||
import moe.lava.banksia.room.entity.StopEntity
|
||||
import moe.lava.banksia.room.entity.StopTimeEntity
|
||||
import moe.lava.banksia.room.entity.TripEntity
|
||||
import moe.lava.banksia.room.entity.VersionMetadataEntity
|
||||
import androidx.room.Database as DatabaseAnnotation
|
||||
|
||||
@DatabaseAnnotation(
|
||||
version = 2,
|
||||
version = 3,
|
||||
entities = [
|
||||
RouteEntity::class,
|
||||
ShapeEntity::class,
|
||||
StopEntity::class,
|
||||
StopTimeEntity::class,
|
||||
TripEntity::class,
|
||||
VersionMetadataEntity::class,
|
||||
],
|
||||
autoMigrations = [
|
||||
AutoMigration(from = 1, to = 2),
|
||||
AutoMigration(from = 2, to = 3),
|
||||
]
|
||||
)
|
||||
@TypeConverters(RouteTypeConverter::class)
|
||||
abstract class Database : RoomDatabase() {
|
||||
abstract val versionMetadataDao: VersionMetadataDao
|
||||
abstract val routeDao: RouteDao
|
||||
abstract val shapeDao: ShapeDao
|
||||
abstract val stopDao: StopDao
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.VersionMetadataEntity
|
||||
|
||||
@Dao
|
||||
interface VersionMetadataDao {
|
||||
@Query("SELECT * FROM VersionMetadata WHERE type == :type")
|
||||
suspend fun get(type: String): VersionMetadataEntity?
|
||||
|
||||
@Query("SELECT * FROM VersionMetadata")
|
||||
suspend fun getAll(): List<VersionMetadataEntity>
|
||||
|
||||
@Insert(onConflict = REPLACE)
|
||||
suspend fun update(vararg data: VersionMetadataEntity)
|
||||
|
||||
suspend fun update(vararg data: Pair<String, Long>) {
|
||||
update(*data.map { (type, lastUpdated) -> VersionMetadataEntity(type, lastUpdated) }.toTypedArray())
|
||||
}
|
||||
|
||||
suspend fun update(lastUpdated: Long, types: Collection<String>) {
|
||||
update(*types.map { VersionMetadataEntity(it, lastUpdated) }.toTypedArray())
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import moe.lava.banksia.model.VersionMetadata
|
||||
|
||||
@Entity(
|
||||
"VersionMetadata",
|
||||
)
|
||||
data class VersionMetadataEntity(
|
||||
/** Entity type this metadata applies to */
|
||||
@PrimaryKey val type: String,
|
||||
/** Last updated */
|
||||
val lastUpdated: Long,
|
||||
) {
|
||||
fun asModel() = VersionMetadata(type, lastUpdated)
|
||||
}
|
||||
|
||||
fun VersionMetadata.asEntity() = VersionMetadataEntity(type, lastUpdated)
|
||||
Loading…
Add table
Add a link
Reference in a new issue