feat: basic departures support

also a huge refactor to simplify modules
This commit is contained in:
Cilly Leang 2026-06-23 00:07:10 +10:00
parent b31067992d
commit 8b3016004b
Signed by: cilly
GPG key ID: 6500251E087653C9
44 changed files with 627 additions and 211 deletions

View file

@ -20,7 +20,9 @@ kotlin {
dependencies {
implementation(projects.core)
implementation(projects.core.data)
implementation(projects.core.sqld)
implementation(projects.core.stoptime)
implementation(projects.server.gtfs)
implementation(projects.server.gtfsRt)

View file

@ -15,22 +15,16 @@ import io.ktor.server.routing.routing
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlinx.datetime.LocalDate
import kotlinx.datetime.TimeZone
import kotlinx.datetime.todayIn
import moe.lava.banksia.core.Constants
import moe.lava.banksia.core.model.atDate
import moe.lava.banksia.core.sqld.RouteQueries
import moe.lava.banksia.core.sqld.StopQueries
import moe.lava.banksia.core.sqld.StopTimeQueries
import moe.lava.banksia.core.sqld.mappers.asModel
import moe.lava.banksia.core.util.serialise
import moe.lava.banksia.server.di.ServerModules
import moe.lava.banksia.server.gtfsrt.GtfsrtService
import moe.lava.banksia.server.routes.stopTimeRoutes
import org.koin.dsl.module
import org.koin.ktor.ext.get
import org.koin.ktor.plugin.Koin
import kotlin.time.Clock
fun main() {
if (System.getenv("BANKSIA_PRODUCTION") == "1") Constants.devMode = false
@ -53,6 +47,8 @@ fun Application.module() {
launch { get<GtfsrtService>().start(this, !Constants.devMode) }
routing {
stopTimeRoutes()
if (Constants.devMode) {
get("/fixup") {
call.respondText("received")
@ -137,23 +133,5 @@ fun Application.module() {
}
call.respond(stops.map { it.asModel() })
}
get("/stoptimes/by_stop/{stop_id}") {
val stopId = call.parameters["stop_id"]!!
val date = call.queryParameters["date"]
?.let { LocalDate.parse(it, LocalDate.Formats.ISO) }
?: Clock.System.todayIn(TimeZone.currentSystemDefault())
val times = withContext(context = Dispatchers.IO) {
get<StopTimeQueries>()
.getForStopDated(
listOf(date.dayOfWeek).serialise().toLong(),
date.toEpochDays(),
stopId,
)
.executeAsList()
.map { it.asModel().atDate(date) }
.sortedBy { it.time.departure }
}
call.respond(times)
}
}
}

View file

@ -1,7 +1,7 @@
package moe.lava.banksia.server.di
import io.ktor.client.HttpClient
import moe.lava.banksia.core.sqld.sqldDiModule
import moe.lava.banksia.core.data.dataDiModule
import moe.lava.banksia.server.GtfsDataFixer
import moe.lava.banksia.server.GtfsImporter
import moe.lava.banksia.server.gtfs.GtfsParser
@ -11,7 +11,7 @@ import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module
val ServerModules = module {
includes(sqldDiModule)
includes(dataDiModule)
single { HttpClient() }
singleOf(::GtfsParser)