server/db/Tables.kt: - Exposed table definitions for Categories, Locations, Items, Settings - Schema mirrors Room entities from app module - Foreign keys on Items referencing Categories and Locations server/db/DatabaseFactory.kt: - H2 file-based DB initialization (jdbc:h2:file:./data/krisenvorrat) - Parameterized for testability (in-memory DB for tests) - Schema auto-creation via SchemaUtils.create() server/repository/InventoryRepository.kt: - Full CRUD: saveInventory() and loadInventory() - Atomic replace via transaction (deleteAll + insert) - Direct mapping between Exposed rows and shared DTOs 4 repository tests with H2 in-memory covering: - Empty DB, full round-trip, overwrite, nullable fields Closes #41
43 lines
1 KiB
Text
43 lines
1 KiB
Text
plugins {
|
|
alias(libs.plugins.kotlin.jvm)
|
|
alias(libs.plugins.kotlin.serialization)
|
|
alias(libs.plugins.ktor)
|
|
}
|
|
|
|
application {
|
|
mainClass.set("de.krisenvorrat.server.ApplicationKt")
|
|
}
|
|
|
|
ktor {
|
|
fatJar {
|
|
archiveFileName.set("server.jar")
|
|
}
|
|
}
|
|
|
|
java {
|
|
sourceCompatibility = JavaVersion.VERSION_11
|
|
targetCompatibility = JavaVersion.VERSION_11
|
|
}
|
|
|
|
kotlin {
|
|
compilerOptions {
|
|
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11)
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation(project(":shared"))
|
|
|
|
implementation(libs.ktor.server.core)
|
|
implementation(libs.ktor.server.netty)
|
|
implementation(libs.ktor.server.content.negotiation)
|
|
implementation(libs.ktor.serialization.kotlinx.json)
|
|
implementation(libs.logback.classic)
|
|
implementation(libs.exposed.core)
|
|
implementation(libs.exposed.jdbc)
|
|
implementation(libs.h2.database)
|
|
|
|
testImplementation(libs.ktor.server.test.host)
|
|
testImplementation(libs.junit)
|
|
testImplementation(libs.kotlinx.serialization.json)
|
|
}
|