feat(server): store and expose last updated date of gtfs data

This commit is contained in:
Cilly Leang 2025-12-19 19:16:22 +11:00
parent 25e5282ea8
commit 5535034fd7
Signed by: cilly
GPG key ID: 6500251E087653C9
8 changed files with 430 additions and 2 deletions

View file

@ -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 }

View file

@ -0,0 +1,9 @@
package moe.lava.banksia.model
import kotlinx.serialization.Serializable
@Serializable
data class VersionMetadata(
val type: String,
val lastUpdated: Long,
)

View file

@ -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

View file

@ -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())
}
}

View file

@ -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)