refactor: split up room into a module, and move client module
This commit is contained in:
parent
c55e3a3232
commit
104a77b27e
60 changed files with 220 additions and 170 deletions
|
|
@ -1,12 +0,0 @@
|
|||
package moe.lava.banksia.client.data.stop
|
||||
|
||||
import moe.lava.banksia.model.Stop
|
||||
import moe.lava.banksia.room.dao.RouteDao
|
||||
import moe.lava.banksia.room.dao.StopDao
|
||||
import moe.lava.banksia.room.entity.asEntity
|
||||
|
||||
class StopLocalDataSource(private val dao: StopDao, private val routeDao: RouteDao) {
|
||||
suspend fun get(id: String) = dao.get(id)
|
||||
suspend fun getByRoute(id: String) = routeDao.stops(id)
|
||||
suspend fun save(vararg stops: Stop) = dao.insertOrReplaceAll(*stops.map { it.asEntity() }.toTypedArray())
|
||||
}
|
||||
|
|
@ -39,4 +39,6 @@ dependencies {
|
|||
implementation(libs.sqlite.bundled)
|
||||
testImplementation(libs.ktor.server.tests)
|
||||
testImplementation(libs.kotlin.test.junit)
|
||||
|
||||
implementation(projects.shared.room)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,12 +19,11 @@ import kotlinx.datetime.LocalDate
|
|||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.todayIn
|
||||
import moe.lava.banksia.Constants
|
||||
import moe.lava.banksia.di.CommonModules
|
||||
import moe.lava.banksia.core.room.dao.RouteDao
|
||||
import moe.lava.banksia.core.room.dao.StopDao
|
||||
import moe.lava.banksia.core.room.dao.StopTimeDao
|
||||
import moe.lava.banksia.core.room.dao.VersionMetadataDao
|
||||
import moe.lava.banksia.model.atDate
|
||||
import moe.lava.banksia.room.dao.RouteDao
|
||||
import moe.lava.banksia.room.dao.StopDao
|
||||
import moe.lava.banksia.room.dao.StopTimeDao
|
||||
import moe.lava.banksia.room.dao.VersionMetadataDao
|
||||
import moe.lava.banksia.server.di.ServerModules
|
||||
import moe.lava.banksia.server.gtfsrt.GtfsrtService
|
||||
import moe.lava.banksia.util.serialise
|
||||
|
|
@ -44,14 +43,12 @@ fun Application.module() {
|
|||
}
|
||||
install(Koin) {
|
||||
modules(module { single { log } })
|
||||
modules(CommonModules, ServerModules)
|
||||
modules(ServerModules)
|
||||
}
|
||||
|
||||
@Suppress("KotlinConstantConditions")
|
||||
if (!Constants.devMode) {
|
||||
val gtfsr by inject<GtfsrtService>()
|
||||
launch { gtfsr.start(this, true) }
|
||||
}
|
||||
@Suppress("KotlinConstantConditions")
|
||||
launch { gtfsr.start(this, !Constants.devMode) }
|
||||
|
||||
routing {
|
||||
if (Constants.devMode) {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package moe.lava.banksia.server
|
||||
|
||||
import moe.lava.banksia.room.Database
|
||||
import moe.lava.banksia.room.entity.StopEntity
|
||||
import moe.lava.banksia.core.room.Database
|
||||
import moe.lava.banksia.core.room.entity.StopEntity
|
||||
import moe.lava.banksia.util.log
|
||||
import java.security.MessageDigest
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package moe.lava.banksia.server
|
|||
import androidx.room.immediateTransaction
|
||||
import androidx.room.useWriterConnection
|
||||
import io.ktor.util.logging.Logger
|
||||
import moe.lava.banksia.core.room.Database
|
||||
import moe.lava.banksia.core.room.entity.asEntity
|
||||
import moe.lava.banksia.model.Route
|
||||
import moe.lava.banksia.model.Service
|
||||
import moe.lava.banksia.model.ServiceException
|
||||
|
|
@ -10,8 +12,6 @@ import moe.lava.banksia.model.Shape
|
|||
import moe.lava.banksia.model.Stop
|
||||
import moe.lava.banksia.model.StopTime
|
||||
import moe.lava.banksia.model.Trip
|
||||
import moe.lava.banksia.room.Database
|
||||
import moe.lava.banksia.room.entity.asEntity
|
||||
import moe.lava.banksia.server.gtfs.GtfsData
|
||||
import moe.lava.banksia.server.gtfs.GtfsParser
|
||||
import kotlin.time.Clock
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package moe.lava.banksia.server.di
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import moe.lava.banksia.core.room.roomDiModule
|
||||
import moe.lava.banksia.server.GtfsDataFixer
|
||||
import moe.lava.banksia.server.GtfsImporter
|
||||
import moe.lava.banksia.server.gtfs.GtfsParser
|
||||
|
|
@ -9,6 +10,8 @@ import org.koin.core.module.dsl.singleOf
|
|||
import org.koin.dsl.module
|
||||
|
||||
val ServerModules = module {
|
||||
includes(roomDiModule)
|
||||
|
||||
single { HttpClient() }
|
||||
singleOf(::GtfsParser)
|
||||
singleOf(::GtfsrtService)
|
||||
|
|
|
|||
|
|
@ -32,11 +32,12 @@ dependencyResolutionManagement {
|
|||
}
|
||||
|
||||
include(":androidApp")
|
||||
include(":client")
|
||||
include(":server")
|
||||
include(":server:gtfs")
|
||||
include(":server:gtfs_rt")
|
||||
include(":shared")
|
||||
include(":shared:data")
|
||||
include(":shared:room")
|
||||
include(":ui")
|
||||
include(":ui:maps")
|
||||
include(":ui:shared")
|
||||
|
|
|
|||
|
|
@ -4,11 +4,12 @@ plugins {
|
|||
alias(libs.plugins.kotlinMultiplatform)
|
||||
alias(libs.plugins.kotlinSerialization)
|
||||
alias(libs.plugins.androidMultiplatformLibrary)
|
||||
alias(libs.plugins.ksp)
|
||||
}
|
||||
|
||||
kotlin {
|
||||
android {
|
||||
namespace = "moe.lava.banksia.client"
|
||||
namespace = "moe.lava.banksia.core.data"
|
||||
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
||||
|
||||
compilerOptions {
|
||||
|
|
@ -23,21 +24,29 @@ kotlin {
|
|||
iosArm64()
|
||||
iosSimulatorArm64()
|
||||
|
||||
jvm()
|
||||
|
||||
sourceSets {
|
||||
androidMain.dependencies {
|
||||
implementation(libs.compose.ui.tooling.preview)
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(libs.kotlinx.coroutines.android)
|
||||
implementation(libs.play.services.location)
|
||||
implementation(libs.koin.compose)
|
||||
implementation(libs.ktor.client.okhttp)
|
||||
}
|
||||
commonMain.dependencies {
|
||||
implementation(libs.okio)
|
||||
implementation(libs.koin.core)
|
||||
implementation(libs.kotlinx.coroutines.core)
|
||||
implementation(libs.kotlinx.datetime)
|
||||
implementation(libs.ktor.client.core)
|
||||
implementation(libs.ktor.client.contentnegotiation)
|
||||
implementation(libs.ktor.serialization.kotlinx.json)
|
||||
implementation(libs.kotlinx.coroutines.core)
|
||||
implementation(libs.kotlinx.datetime)
|
||||
implementation(libs.kotlinx.serialization.json)
|
||||
implementation(libs.kotlinx.serialization.protobuf)
|
||||
|
||||
implementation(projects.shared)
|
||||
implementation(projects.shared.room)
|
||||
}
|
||||
iosMain.dependencies {
|
||||
implementation(libs.ktor.client.darwin)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.client.di
|
||||
package moe.lava.banksia.core.data
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.plugins.HttpSend
|
||||
|
|
@ -8,21 +8,24 @@ import io.ktor.client.plugins.plugin
|
|||
import io.ktor.serialization.kotlinx.json.json
|
||||
import kotlinx.serialization.json.Json
|
||||
import moe.lava.banksia.Constants
|
||||
import moe.lava.banksia.client.data.route.RouteLocalDataSource
|
||||
import moe.lava.banksia.client.data.route.RouteRemoteDataSource
|
||||
import moe.lava.banksia.client.data.stop.StopLocalDataSource
|
||||
import moe.lava.banksia.client.data.stop.StopRemoteDataSource
|
||||
import moe.lava.banksia.client.data.stoptime.StopTimeLocalDataSource
|
||||
import moe.lava.banksia.client.data.stoptime.StopTimeRemoteDataSource
|
||||
import moe.lava.banksia.client.repository.RouteRepository
|
||||
import moe.lava.banksia.client.repository.StopRepository
|
||||
import moe.lava.banksia.client.repository.StopTimeRepository
|
||||
import moe.lava.banksia.core.data.repositories.RouteRepository
|
||||
import moe.lava.banksia.core.data.repositories.StopRepository
|
||||
import moe.lava.banksia.core.data.repositories.StopTimeRepository
|
||||
import moe.lava.banksia.core.data.sources.route.RouteLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.route.RouteRemoteDataSource
|
||||
import moe.lava.banksia.core.data.sources.stop.StopLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.stop.StopRemoteDataSource
|
||||
import moe.lava.banksia.core.data.sources.stoptime.StopTimeLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.stoptime.StopTimeRemoteDataSource
|
||||
import moe.lava.banksia.core.room.roomDiModule
|
||||
import moe.lava.banksia.data.ptv.PtvService
|
||||
import moe.lava.banksia.util.log
|
||||
import org.koin.core.module.dsl.singleOf
|
||||
import org.koin.dsl.module
|
||||
|
||||
val ClientModule = module {
|
||||
val dataDiModule = module {
|
||||
includes(roomDiModule)
|
||||
|
||||
// HTTP Clients
|
||||
singleOf(::PtvService)
|
||||
single {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.client.repository
|
||||
package moe.lava.banksia.core.data.repositories
|
||||
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import moe.lava.banksia.client.data.route.RouteLocalDataSource
|
||||
import moe.lava.banksia.client.data.route.RouteRemoteDataSource
|
||||
import moe.lava.banksia.core.data.sources.route.RouteLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.route.RouteRemoteDataSource
|
||||
|
||||
class RouteRepository(
|
||||
class RouteRepository internal constructor(
|
||||
private val local: RouteLocalDataSource,
|
||||
private val remote: RouteRemoteDataSource,
|
||||
) {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.client.repository
|
||||
package moe.lava.banksia.core.data.repositories
|
||||
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import moe.lava.banksia.client.data.stop.StopLocalDataSource
|
||||
import moe.lava.banksia.client.data.stop.StopRemoteDataSource
|
||||
import moe.lava.banksia.core.data.sources.stop.StopLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.stop.StopRemoteDataSource
|
||||
|
||||
class StopRepository(
|
||||
class StopRepository internal constructor(
|
||||
private val local: StopLocalDataSource,
|
||||
private val remote: StopRemoteDataSource,
|
||||
) {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package moe.lava.banksia.client.repository
|
||||
package moe.lava.banksia.core.data.repositories
|
||||
|
||||
import moe.lava.banksia.client.data.stoptime.StopTimeLocalDataSource
|
||||
import moe.lava.banksia.client.data.stoptime.StopTimeRemoteDataSource
|
||||
import moe.lava.banksia.core.data.sources.stoptime.StopTimeLocalDataSource
|
||||
import moe.lava.banksia.core.data.sources.stoptime.StopTimeRemoteDataSource
|
||||
import moe.lava.banksia.model.StopTimeDated
|
||||
|
||||
class StopTimeRepository(
|
||||
class StopTimeRepository internal constructor(
|
||||
private val local: StopTimeLocalDataSource,
|
||||
private val remote: StopTimeRemoteDataSource,
|
||||
) {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package moe.lava.banksia.client.data.route
|
||||
package moe.lava.banksia.core.data.sources.route
|
||||
|
||||
import moe.lava.banksia.core.room.dao.RouteDao
|
||||
import moe.lava.banksia.core.room.entity.asEntity
|
||||
import moe.lava.banksia.model.Route
|
||||
import moe.lava.banksia.room.dao.RouteDao
|
||||
import moe.lava.banksia.room.entity.asEntity
|
||||
|
||||
class RouteLocalDataSource(private val dao: RouteDao) {
|
||||
internal class RouteLocalDataSource(private val dao: RouteDao) {
|
||||
suspend fun get(id: String) = dao.get(id)
|
||||
suspend fun getAll() = dao.getAll()
|
||||
suspend fun save(vararg routes: Route) = dao.insertOrReplaceAll(*routes.map { it.asEntity() }.toTypedArray())
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.client.data.route
|
||||
package moe.lava.banksia.core.data.sources.route
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.get
|
||||
import moe.lava.banksia.model.Route
|
||||
|
||||
class RouteRemoteDataSource(val client: HttpClient) {
|
||||
internal class RouteRemoteDataSource(val client: HttpClient) {
|
||||
suspend fun get(id: String) = client.get("routes/${id}").body<Route>()
|
||||
suspend fun getAll() = client.get("routes").body<List<Route>>()
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
package moe.lava.banksia.core.data.sources.stop
|
||||
|
||||
import moe.lava.banksia.core.room.dao.RouteDao
|
||||
import moe.lava.banksia.core.room.dao.StopDao
|
||||
import moe.lava.banksia.core.room.entity.asEntity
|
||||
import moe.lava.banksia.model.Stop
|
||||
|
||||
internal class StopLocalDataSource(private val dao: StopDao, private val routeDao: RouteDao) {
|
||||
suspend fun get(id: String) = dao.get(id)
|
||||
suspend fun getByRoute(id: String) = routeDao.stops(id)
|
||||
suspend fun save(vararg stops: Stop) = dao.insertOrReplaceAll(*stops.map { it.asEntity() }.toTypedArray())
|
||||
}
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.client.data.stop
|
||||
package moe.lava.banksia.core.data.sources.stop
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.get
|
||||
import moe.lava.banksia.model.Stop
|
||||
|
||||
class StopRemoteDataSource(val client: HttpClient) {
|
||||
internal class StopRemoteDataSource(val client: HttpClient) {
|
||||
suspend fun get(id: String) = client.get("stops/${id}").body<Stop>()
|
||||
suspend fun getByRoute(id: String) = client.get("route_stops/${id}").body<List<Stop>>()
|
||||
}
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
package moe.lava.banksia.client.data.stoptime
|
||||
package moe.lava.banksia.core.data.sources.stoptime
|
||||
|
||||
import kotlinx.datetime.LocalDate
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.todayIn
|
||||
import moe.lava.banksia.core.room.dao.StopTimeDao
|
||||
import moe.lava.banksia.model.StopTimeDated
|
||||
import moe.lava.banksia.model.atDate
|
||||
import moe.lava.banksia.room.dao.StopTimeDao
|
||||
import moe.lava.banksia.util.serialise
|
||||
import kotlin.time.Clock
|
||||
|
||||
class StopTimeLocalDataSource(
|
||||
internal class StopTimeLocalDataSource(
|
||||
private val stopTimeDao: StopTimeDao,
|
||||
) {
|
||||
suspend fun getAtStop(
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.client.data.stoptime
|
||||
package moe.lava.banksia.core.data.sources.stoptime
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import io.ktor.client.call.body
|
||||
|
|
@ -10,7 +10,7 @@ import kotlinx.datetime.todayIn
|
|||
import moe.lava.banksia.model.StopTimeDated
|
||||
import kotlin.time.Clock
|
||||
|
||||
class StopTimeRemoteDataSource(
|
||||
internal class StopTimeRemoteDataSource(
|
||||
private val client: HttpClient,
|
||||
) {
|
||||
suspend fun getAtStop(
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.client.data.trip
|
||||
package moe.lava.banksia.core.data.sources.trip
|
||||
|
||||
import io.ktor.client.HttpClient
|
||||
import kotlinx.datetime.DayOfWeek
|
||||
|
|
@ -7,7 +7,7 @@ import kotlinx.datetime.todayIn
|
|||
import moe.lava.banksia.model.Trip
|
||||
import kotlin.time.Clock
|
||||
|
||||
class TripRemoteDataSource(
|
||||
internal class TripRemoteDataSource(
|
||||
private val client: HttpClient,
|
||||
) {
|
||||
suspend fun get(
|
||||
54
shared/room/build.gradle.kts
Normal file
54
shared/room/build.gradle.kts
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.kotlinMultiplatform)
|
||||
alias(libs.plugins.kotlinSerialization)
|
||||
alias(libs.plugins.androidMultiplatformLibrary)
|
||||
alias(libs.plugins.ksp)
|
||||
alias(libs.plugins.room)
|
||||
}
|
||||
|
||||
room {
|
||||
schemaDirectory("$projectDir/schemas")
|
||||
}
|
||||
|
||||
kotlin {
|
||||
android {
|
||||
namespace = "moe.lava.banksia.core.room"
|
||||
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
||||
|
||||
compilerOptions {
|
||||
jvmTarget.set(JvmTarget.JVM_11)
|
||||
}
|
||||
}
|
||||
|
||||
compilerOptions {
|
||||
freeCompilerArgs.add("-opt-in=kotlin.time.ExperimentalTime")
|
||||
}
|
||||
|
||||
iosArm64()
|
||||
iosSimulatorArm64()
|
||||
|
||||
jvm()
|
||||
|
||||
sourceSets {
|
||||
commonMain.dependencies {
|
||||
implementation(libs.okio)
|
||||
implementation(libs.koin.core)
|
||||
implementation(libs.kotlinx.coroutines.core)
|
||||
implementation(libs.kotlinx.datetime)
|
||||
implementation(libs.kotlinx.serialization.json)
|
||||
implementation(libs.room.runtime)
|
||||
implementation(libs.sqlite.bundled)
|
||||
|
||||
implementation(projects.shared)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
add("kspAndroid", libs.room.compiler)
|
||||
add("kspIosArm64", libs.room.compiler)
|
||||
add("kspIosSimulatorArm64", libs.room.compiler)
|
||||
add("kspJvm", libs.room.compiler)
|
||||
}
|
||||
|
|
@ -1,12 +1,10 @@
|
|||
package moe.lava.banksia.di
|
||||
package moe.lava.banksia.core.room
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import moe.lava.banksia.room.Database
|
||||
import org.koin.core.parameter.ParametersHolder
|
||||
import org.koin.core.scope.Scope
|
||||
import org.koin.dsl.module
|
||||
|
||||
class AndroidDatabaseBuilder(val ctx: Context) : PlatformDatabaseBuilder {
|
||||
override fun getBuilder(): RoomDatabase.Builder<Database> {
|
||||
|
|
@ -19,7 +17,5 @@ class AndroidDatabaseBuilder(val ctx: Context) : PlatformDatabaseBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
actual fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder =
|
||||
internal actual fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder =
|
||||
AndroidDatabaseBuilder(get())
|
||||
|
||||
internal actual val ExtPlatformModule = module { }
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room
|
||||
package moe.lava.banksia.core.room
|
||||
|
||||
import androidx.room.AutoMigration
|
||||
import androidx.room.RoomDatabase
|
||||
|
|
@ -10,23 +10,23 @@ import androidx.sqlite.driver.bundled.BundledSQLiteDriver
|
|||
import androidx.sqlite.execSQL
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.IO
|
||||
import moe.lava.banksia.room.converter.RouteTypeConverter
|
||||
import moe.lava.banksia.room.dao.RouteDao
|
||||
import moe.lava.banksia.room.dao.ServiceDao
|
||||
import moe.lava.banksia.room.dao.ServiceExceptionDao
|
||||
import moe.lava.banksia.room.dao.ShapeDao
|
||||
import moe.lava.banksia.room.dao.StopDao
|
||||
import moe.lava.banksia.room.dao.StopTimeDao
|
||||
import moe.lava.banksia.room.dao.TripDao
|
||||
import moe.lava.banksia.room.dao.VersionMetadataDao
|
||||
import moe.lava.banksia.room.entity.RouteEntity
|
||||
import moe.lava.banksia.room.entity.ServiceEntity
|
||||
import moe.lava.banksia.room.entity.ServiceExceptionEntity
|
||||
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 moe.lava.banksia.core.room.converter.RouteTypeConverter
|
||||
import moe.lava.banksia.core.room.dao.RouteDao
|
||||
import moe.lava.banksia.core.room.dao.ServiceDao
|
||||
import moe.lava.banksia.core.room.dao.ServiceExceptionDao
|
||||
import moe.lava.banksia.core.room.dao.ShapeDao
|
||||
import moe.lava.banksia.core.room.dao.StopDao
|
||||
import moe.lava.banksia.core.room.dao.StopTimeDao
|
||||
import moe.lava.banksia.core.room.dao.TripDao
|
||||
import moe.lava.banksia.core.room.dao.VersionMetadataDao
|
||||
import moe.lava.banksia.core.room.entity.RouteEntity
|
||||
import moe.lava.banksia.core.room.entity.ServiceEntity
|
||||
import moe.lava.banksia.core.room.entity.ServiceExceptionEntity
|
||||
import moe.lava.banksia.core.room.entity.ShapeEntity
|
||||
import moe.lava.banksia.core.room.entity.StopEntity
|
||||
import moe.lava.banksia.core.room.entity.StopTimeEntity
|
||||
import moe.lava.banksia.core.room.entity.TripEntity
|
||||
import moe.lava.banksia.core.room.entity.VersionMetadataEntity
|
||||
import androidx.room.Database as DatabaseAnnotation
|
||||
|
||||
@DatabaseAnnotation(
|
||||
|
|
@ -1,12 +1,14 @@
|
|||
package moe.lava.banksia.di
|
||||
package moe.lava.banksia.core.room
|
||||
|
||||
import moe.lava.banksia.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import org.koin.core.parameter.ParametersHolder
|
||||
import org.koin.core.scope.Scope
|
||||
import org.koin.dsl.module
|
||||
|
||||
val CommonModules = module {
|
||||
includes(PlatformModule)
|
||||
|
||||
val roomDiModule = module {
|
||||
single { provideDatabaseBuilder(it) }
|
||||
single { Database.build(get<PlatformDatabaseBuilder>().getBuilder()) }
|
||||
|
||||
single { get<Database>().versionMetadataDao }
|
||||
single { get<Database>().routeDao }
|
||||
single { get<Database>().serviceDao }
|
||||
|
|
@ -16,3 +18,9 @@ val CommonModules = module {
|
|||
single { get<Database>().stopTimeDao }
|
||||
single { get<Database>().tripDao }
|
||||
}
|
||||
|
||||
internal interface PlatformDatabaseBuilder {
|
||||
fun getBuilder(): RoomDatabase.Builder<Database>
|
||||
}
|
||||
|
||||
internal expect fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.converter
|
||||
package moe.lava.banksia.core.room.converter
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import moe.lava.banksia.model.RouteType
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.converter
|
||||
package moe.lava.banksia.core.room.converter
|
||||
|
||||
import androidx.room.TypeConverter
|
||||
import moe.lava.banksia.model.ShapePath
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.RouteEntity
|
||||
import moe.lava.banksia.room.entity.StopEntity
|
||||
import moe.lava.banksia.core.room.entity.RouteEntity
|
||||
import moe.lava.banksia.core.room.entity.StopEntity
|
||||
|
||||
@Dao
|
||||
interface RouteDao {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.ServiceEntity
|
||||
import moe.lava.banksia.core.room.entity.ServiceEntity
|
||||
|
||||
@Dao
|
||||
interface ServiceDao {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.ServiceExceptionEntity
|
||||
import moe.lava.banksia.core.room.entity.ServiceExceptionEntity
|
||||
|
||||
@Dao
|
||||
interface ServiceExceptionDao {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.ShapeEntity
|
||||
import moe.lava.banksia.core.room.entity.ShapeEntity
|
||||
|
||||
@Dao
|
||||
interface ShapeDao {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.StopEntity
|
||||
import moe.lava.banksia.core.room.entity.StopEntity
|
||||
|
||||
@Dao
|
||||
interface StopDao {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.StopTimeEntity
|
||||
import moe.lava.banksia.core.room.entity.StopTimeEntity
|
||||
|
||||
@Dao
|
||||
interface StopTimeDao {
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.room.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy.Companion.REPLACE
|
||||
import androidx.room.Query
|
||||
import moe.lava.banksia.room.entity.TripEntity
|
||||
import moe.lava.banksia.core.room.entity.TripEntity
|
||||
|
||||
@Dao
|
||||
interface TripDao {
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
package moe.lava.banksia.room.dao
|
||||
package moe.lava.banksia.core.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
|
||||
import moe.lava.banksia.core.room.entity.VersionMetadataEntity
|
||||
|
||||
@Dao
|
||||
interface VersionMetadataDao {
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import androidx.room.TypeConverters
|
||||
import moe.lava.banksia.core.room.converter.ShapePathConverter
|
||||
import moe.lava.banksia.model.Shape
|
||||
import moe.lava.banksia.model.ShapePath
|
||||
import moe.lava.banksia.room.converter.ShapePathConverter
|
||||
|
||||
@Entity("Shape")
|
||||
@TypeConverters(ShapePathConverter::class)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.ForeignKey
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package moe.lava.banksia.room.entity
|
||||
package moe.lava.banksia.core.room.entity
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
|
|
@ -1,10 +1,8 @@
|
|||
package moe.lava.banksia.di
|
||||
package moe.lava.banksia.core.room
|
||||
|
||||
import androidx.room.RoomDatabase
|
||||
import moe.lava.banksia.room.Database
|
||||
import org.koin.core.parameter.ParametersHolder
|
||||
import org.koin.core.scope.Scope
|
||||
import org.koin.dsl.module
|
||||
|
||||
class IosDatabaseBuilder() : PlatformDatabaseBuilder {
|
||||
override fun getBuilder(): RoomDatabase.Builder<Database> {
|
||||
|
|
@ -12,7 +10,5 @@ class IosDatabaseBuilder() : PlatformDatabaseBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
actual fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder =
|
||||
internal actual fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder =
|
||||
IosDatabaseBuilder()
|
||||
|
||||
internal actual val ExtPlatformModule = module { }
|
||||
|
|
@ -1,11 +1,9 @@
|
|||
package moe.lava.banksia.di
|
||||
package moe.lava.banksia.core.room
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.room.RoomDatabase
|
||||
import moe.lava.banksia.room.Database
|
||||
import org.koin.core.parameter.ParametersHolder
|
||||
import org.koin.core.scope.Scope
|
||||
import org.koin.dsl.module
|
||||
import java.io.File
|
||||
|
||||
class JvmDatabaseBuilder() : PlatformDatabaseBuilder {
|
||||
|
|
@ -17,7 +15,5 @@ class JvmDatabaseBuilder() : PlatformDatabaseBuilder {
|
|||
}
|
||||
}
|
||||
|
||||
actual fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder =
|
||||
internal actual fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder =
|
||||
JvmDatabaseBuilder()
|
||||
|
||||
internal actual val ExtPlatformModule = module { }
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package moe.lava.banksia.di
|
||||
|
||||
import org.koin.dsl.module
|
||||
|
||||
val coreDiModule = module { }
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
package moe.lava.banksia.di
|
||||
|
||||
import androidx.room.RoomDatabase
|
||||
import moe.lava.banksia.room.Database
|
||||
import org.koin.core.module.Module
|
||||
import org.koin.core.parameter.ParametersHolder
|
||||
import org.koin.core.scope.Scope
|
||||
import org.koin.dsl.module
|
||||
|
||||
interface PlatformDatabaseBuilder {
|
||||
fun getBuilder(): RoomDatabase.Builder<Database>
|
||||
}
|
||||
|
||||
expect fun Scope.provideDatabaseBuilder(p: ParametersHolder): PlatformDatabaseBuilder
|
||||
|
||||
internal expect val ExtPlatformModule: Module
|
||||
|
||||
internal val PlatformModule = module {
|
||||
includes(ExtPlatformModule)
|
||||
single { provideDatabaseBuilder(it) }
|
||||
}
|
||||
|
|
@ -67,8 +67,8 @@ kotlin {
|
|||
implementation(libs.moko.geo.compose)
|
||||
implementation(libs.ui.backhandler)
|
||||
|
||||
implementation(projects.client)
|
||||
implementation(projects.shared)
|
||||
implementation(projects.shared.data)
|
||||
implementation(projects.ui.maps)
|
||||
implementation(projects.ui.shared)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package moe.lava.banksia.ui
|
|||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import moe.lava.banksia.di.CommonModules
|
||||
import moe.lava.banksia.di.coreDiModule
|
||||
import moe.lava.banksia.ui.di.AppModule
|
||||
import moe.lava.banksia.ui.screens.map.MapScreen
|
||||
import org.koin.compose.KoinMultiplatformApplication
|
||||
|
|
@ -14,7 +14,7 @@ import org.koin.dsl.koinConfiguration
|
|||
@Composable
|
||||
fun App() {
|
||||
KoinMultiplatformApplication(config = koinConfiguration {
|
||||
modules(CommonModules, AppModule)
|
||||
modules(coreDiModule, AppModule)
|
||||
}) {
|
||||
MapScreen()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
package moe.lava.banksia.ui.di
|
||||
|
||||
import moe.lava.banksia.client.di.ClientModule
|
||||
import moe.lava.banksia.core.data.dataDiModule
|
||||
import moe.lava.banksia.ui.screens.map.MapScreenViewModel
|
||||
import org.koin.core.module.dsl.viewModelOf
|
||||
import org.koin.dsl.module
|
||||
|
||||
val AppModule = module {
|
||||
includes(ClientModule)
|
||||
includes(dataDiModule)
|
||||
|
||||
// ViewModel
|
||||
viewModelOf(::MapScreenViewModel)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,9 +15,9 @@ import kotlinx.coroutines.flow.update
|
|||
import kotlinx.coroutines.launch
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.toInstant
|
||||
import moe.lava.banksia.client.repository.RouteRepository
|
||||
import moe.lava.banksia.client.repository.StopRepository
|
||||
import moe.lava.banksia.client.repository.StopTimeRepository
|
||||
import moe.lava.banksia.core.data.repositories.RouteRepository
|
||||
import moe.lava.banksia.core.data.repositories.StopRepository
|
||||
import moe.lava.banksia.core.data.repositories.StopTimeRepository
|
||||
import moe.lava.banksia.data.ptv.PtvService
|
||||
import moe.lava.banksia.model.Route
|
||||
import moe.lava.banksia.model.RouteType
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue