daten Klassen im shared Ordner erstellt und gradle überarbeitet

This commit is contained in:
stefan 2025-05-06 15:07:07 +02:00
parent 490e86bf9d
commit b513643b02
28 changed files with 217 additions and 256 deletions

View File

@ -3,7 +3,10 @@ kotlin.code.style=official
kotlin.daemon.jvmargs=-Xmx2048M kotlin.daemon.jvmargs=-Xmx2048M
#Gradle #Gradle
org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -XX:+UseParallelGC
org.gradle.parallel=true
org.gradle.caching=true
org.gradle.configureondemand=true
#Ktor #Ktor
io.ktor.development=true io.ktor.development=true

View File

@ -1,39 +1,54 @@
[versions] [versions]
androidx-lifecycle = "2.8.4" # Kotlin and related libraries
compose-multiplatform = "1.7.3"
junit = "4.13.2"
kotlin = "2.1.20" kotlin = "2.1.20"
kotlinx-coroutines = "1.10.1" kotlinx-coroutines = "1.10.1"
kotlinx-serialization = "1.8.1"
kotlinx-datetime = "0.6.1"
# UI frameworks
compose-multiplatform = "1.7.3"
androidx-lifecycle = "2.8.4"
# Ktor
ktor = "3.1.2" ktor = "3.1.2"
ktor-tests = "2.3.13"
logback = "1.5.18" # Database
junit-jupiter = "5.12.0"
junit-jupiter-version = "5.8.1"
exposed = "0.52.0" exposed = "0.52.0"
postgresql = "42.7.3" postgresql = "42.7.3"
hikari = "5.1.0" hikari = "5.1.0"
h2 = "2.2.224" h2 = "2.2.224"
# Logging
logback = "1.5.18"
# Testing
junit = "4.13.2"
junit-jupiter = "5.12.0"
# Utilities
uuid = "0.8.4"
bignum = "0.3.10"
[libraries] [libraries]
# Kotlin and related libraries
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" }
junit = { group = "junit", name = "junit", version.ref = "junit" } kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-datetime = { group = "org.jetbrains.kotlinx", name = "kotlinx-datetime", version.ref = "kotlinx-datetime" }
# UI frameworks
androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "androidx-lifecycle" }
androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
logback = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } # Ktor
ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" } ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" }
ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" } ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" }
ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor-tests" }
ktor-server-html-builder = { module = "io.ktor:ktor-server-html-builder", version.ref = "ktor" } ktor-server-html-builder = { module = "io.ktor:ktor-server-html-builder", version.ref = "ktor" }
junit-jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit-jupiter" }
jupiter-junit-jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit-jupiter" }
# ... andere libraries ...
ktor-server-config-yaml = { module = "io.ktor:ktor-server-config-yaml", version.ref = "ktor" } ktor-server-config-yaml = { module = "io.ktor:ktor-server-config-yaml", version.ref = "ktor" }
junit-junit-jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit-jupiter-version" } ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" }
# Database
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" } exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
exposed-dao = { module = "org.jetbrains.exposed:exposed-dao", version.ref = "exposed" } exposed-dao = { module = "org.jetbrains.exposed:exposed-dao", version.ref = "exposed" }
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" } exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
@ -41,9 +56,21 @@ postgresql-driver = { module = "org.postgresql:postgresql", version.ref = "postg
hikari-cp = { module = "com.zaxxer:HikariCP", version.ref = "hikari" } hikari-cp = { module = "com.zaxxer:HikariCP", version.ref = "hikari" }
h2-driver = { module = "com.h2database:h2", version.ref = "h2" } h2-driver = { module = "com.h2database:h2", version.ref = "h2" }
# Logging
logback = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
# Testing
junit = { group = "junit", name = "junit", version.ref = "junit" }
junit-jupiter = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit-jupiter" }
# Utilities
uuid = { group = "com.benasher44", name = "uuid", version.ref = "uuid" }
bignum = { group = "com.ionspin.kotlin", name = "bignum", version.ref = "bignum" }
[plugins] [plugins]
kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" } composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" }
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
ktor = { id = "io.ktor.plugin", version.ref = "ktor" } ktor = { id = "io.ktor.plugin", version.ref = "ktor" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }

View File

@ -52,6 +52,11 @@
"@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14" "@jridgewell/sourcemap-codec" "^1.4.14"
"@js-joda/core@3.2.0":
version "3.2.0"
resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-3.2.0.tgz#3e61e21b7b2b8a6be746df1335cf91d70db2a273"
integrity sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==
"@leichtgewicht/ip-codec@^2.0.1": "@leichtgewicht/ip-codec@^2.0.1":
version "2.0.5" version "2.0.5"
resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1"

View File

@ -22,9 +22,6 @@ dependencies {
testImplementation(libs.ktor.server.tests) testImplementation(libs.ktor.server.tests)
testImplementation(libs.kotlin.test.junit) testImplementation(libs.kotlin.test.junit)
testImplementation(libs.junit.jupiter) testImplementation(libs.junit.jupiter)
testImplementation(libs.jupiter.junit.jupiter)
testImplementation(libs.junit.junit.jupiter)
// Exposed für Datenbankzugriff (Core, DAO-Pattern, JDBC-Implementierung) // Exposed für Datenbankzugriff (Core, DAO-Pattern, JDBC-Implementierung)
implementation(libs.exposed.core) implementation(libs.exposed.core)

View File

@ -1,16 +0,0 @@
package at.mocode.model
import kotlinx.serialization.Serializable
@Serializable
data class Nennung(
// Wir brauchen die Turnier-ID, um die Nennung zuzuordnen
val turnierId: String,
// Einfache Felder für den Start
val riderName: String = "", // Standardwerte für leeres Formular
val horseName: String = "",
val email: String = "",
val comments: String? = null
// Hier kommen später Felder hinzu: Verein, Lizenznr., Tel,
// und vor allem: die Auswahl der Prüfungen!
)

View File

@ -1,14 +0,0 @@
package at.mocode.model
import kotlinx.serialization.Serializable
@Serializable
data class Turnier(
val id: String, // Eine eindeutige ID für das Turnier (z.B. eine UUID als String)
val name: String, // Der Name, z.B. "CDN-C Edelhof April 2025"
val datum: String, // Das Datum oder der Zeitraum, erstmal als Text, z.B. "14.04.2025 - 15.04.2025"
val logoUrl: String? = null, // Optional: Link zum Logo des Veranstalters
val ausschreibungUrl: String? = null // Optional: Link zur Ausschreibungs-PDF
// Hier können später viele weitere Felder hinzukommen:
// Ort, Veranstalter, Status (geplant, läuft, beendet), Disziplinen etc.
)

View File

@ -0,0 +1,21 @@
package at.mocode.tables
/*
object TurniereTable: Table("turniere") {
val id: Column<String> = varchar("id", 36).uniqueIndex()
val veranstaltungId: Column<String> = varchar("veranstaltungId", 36).uniqueIndex()
val oepsTurnierNr: Column<String> = varchar("oepsTurnierNr", 255)
val titel: Column<String> = varchar("titel", 255)
val untertitel: Column<String?> = varchar("titel", 255).nullable()
// Definiert die Spalte 'id' als Primärschlüssel für diese Tabelle
override val primaryKey = PrimaryKey(id)
}
*/

View File

@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
plugins { plugins {
alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.kotlinMultiplatform)
kotlin("plugin.serialization") version libs.versions.kotlin.get() alias(libs.plugins.kotlinSerialization)
} }
kotlin { kotlin {
@ -29,20 +29,20 @@ kotlin {
sourceSets { sourceSets {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
// put your Multiplatform dependencies here // Multiplatform dependencies
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.1") implementation(libs.kotlinx.serialization.json)
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.1") implementation(libs.kotlinx.datetime)
implementation("com.benasher44:uuid:0.8.1") implementation(libs.uuid)
implementation("com.ionspin.kotlin:bignum:0.3.8") implementation(libs.bignum)
} }
} }
val jvmMain by getting { // val jvmMain by getting {
dependsOn(commonMain) // dependsOn(commonMain)
} // }
//
val wasmJsMain by getting { // val wasmJsMain by getting {
dependsOn(commonMain) // dependsOn(commonMain)
} // }
} }
} }

View File

@ -1,9 +0,0 @@
package at.mocode
class Greeting {
private val platform = getPlatform()
fun greet(): String {
return "Hello, ${platform.name}!"
}
}

View File

@ -1,7 +0,0 @@
package at.mocode
interface Platform {
val name: String
}
expect fun getPlatform(): Platform

View File

@ -1,14 +1,19 @@
package at.mocode.model.entitaeten package at.mocode.model.entitaeten
import at.mocode.model.serializer.BigDecimalSerializer import at.mocode.model.serializers.BigDecimalSerializer
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.serializers.KotlinInstantSerializer
import at.mocode.model.serializer.KotlinInstantSerializer import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import com.ionspin.kotlin.bignum.decimal.BigDecimal
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Artikel( data class Artikel(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
var bezeichnung: String, var bezeichnung: String,
@Serializable(with = BigDecimalSerializer::class) // Beispiel für Serializer @Serializable(with = BigDecimalSerializer::class) // Beispiel für Serializer
var preis: BigDecimal, var preis: BigDecimal,

View File

@ -1,14 +1,16 @@
package at.mocode.model.entitaeten package at.mocode.model.entitaeten
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class MeisterschaftReferenz( data class MeisterschaftReferenz(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var meisterschaftId: UUID, // FK zu einer Meisterschafts-Entität var meisterschaftId: Uuid, // FK zu einer Meisterschafts-Entität
var name: String, var name: String,
var betrifftBewerbNummern: List<Int>, var betrifftBewerbNummern: List<Int>,
var berechnungsstrategie: String?, var berechnungsstrategie: String?,

View File

@ -1,13 +1,15 @@
package at.mocode.model.entitaeten package at.mocode.model.entitaeten
import at.mocode.model.enums.PlatzTyp import at.mocode.model.enums.PlatzTyp
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Platz( data class Platz(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
var name: String, var name: String,
var dimension: String?, var dimension: String?,
var boden: String?, var boden: String?,

View File

@ -1,31 +1,22 @@
package at.mocode.model.entitaeten package at.mocode.model.entitaeten
// Hinweis: In einem Kotlin Multiplatform-Projekt können JVM-spezifische Klassen wie
// java.math.BigDecimal und java.util.UUID nicht im commonMain-Quellcode verwendet werden.
// Stattdessen werden multiplatformfähige Alternativen verwendet:
// - com.benasher44.uuid.Uuid anstelle von java.util.UUID
// - com.ionspin.kotlin.bignum.decimal.BigDecimal anstelle von java.math.BigDecimal
// Diese Klassen bieten ähnliche Funktionalität, sind aber auf allen Plattformen verfügbar.
//
// Für JVM-spezifischen Code können diese Klassen im jvmMain-Quellset verwendet werden.
// Siehe: shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt
import at.mocode.model.enums.NennungsArt import at.mocode.model.enums.NennungsArt
import at.mocode.model.serializer.* import at.mocode.model.serializers.*
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import com.ionspin.kotlin.bignum.decimal.BigDecimal import com.ionspin.kotlin.bignum.decimal.BigDecimal
import kotlinx.datetime.Clock import kotlinx.datetime.Clock
import kotlinx.datetime.Instant import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDateTime import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import com.benasher44.uuid.Uuid as UUID
@Serializable @Serializable
data class Turnier( data class Turnier(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var veranstaltungId: UUID, var veranstaltungId: Uuid,
var oepsTurnierNr: String, var oepsTurnierNr: String,
var titel: String, var titel: String,
var untertitel: String?, var untertitel: String?,
@ -44,17 +35,17 @@ data class Turnier(
var startgeldStandard: BigDecimal?, var startgeldStandard: BigDecimal?,
var austragungsplaetze: List<Platz> = emptyList(), var austragungsplaetze: List<Platz> = emptyList(),
var vorbereitungsplaetze: List<Platz> = emptyList(), var vorbereitungsplaetze: List<Platz> = emptyList(),
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var turnierleiterId: UUID?, // FK zu Person var turnierleiterId: Uuid?, // FK zu Person
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var turnierbeauftragterId: UUID?, // FK zu Person var turnierbeauftragterId: Uuid?, // FK zu Person
var richterIds: List<@Serializable(with = JavaUUIDSerializer::class)UUID> = emptyList(), // Pool an Richtern var richterIds: List<@Serializable(with = UuidSerializer::class) Uuid> = emptyList(), // Pool an Richtern
var parcoursbauerIds: List<@Serializable(with = JavaUUIDSerializer::class)UUID> = emptyList(), // FKs zu Person var parcoursbauerIds: List<@Serializable(with = UuidSerializer::class) Uuid> = emptyList(), // FKs zu Person
var parcoursAssistentIds: List<@Serializable(with = JavaUUIDSerializer::class)UUID> = emptyList(), // FKs zu Person var parcoursAssistentIds: List<@Serializable(with = UuidSerializer::class) Uuid> = emptyList(), // FKs zu Person
var tierarztInfos: String?, var tierarztInfos: String?,
var hufschmiedInfo: String?, var hufschmiedInfo: String?,
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var meldestelleVerantwortlicherId: UUID?, // FK zu Person var meldestelleVerantwortlicherId: Uuid?, // FK zu Person
var meldestelleTelefon: String?, var meldestelleTelefon: String?,
var meldestelleOeffnungszeiten: String?, var meldestelleOeffnungszeiten: String?,
var ergebnislistenUrl: String?, // Wird später meist system-generiert var ergebnislistenUrl: String?, // Wird später meist system-generiert

View File

@ -1,13 +1,20 @@
package at.mocode.model.entitaeten package at.mocode.model.entitaeten
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.enums.VeranstalterTyp
import at.mocode.model.serializer.KotlinInstantSerializer import at.mocode.model.serializers.KotlinInstantSerializer
import at.mocode.model.serializers.KotlinLocalDateSerializer
import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Veranstaltung( data class Veranstaltung(
@Serializable(with = JavaUUIDSerializer::class) // Beispiel für Serializer, falls nötig @Serializable(with = UuidSerializer::class) // Beispiel für Serializer, falls nötig
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
var name: String, var name: String,
@Serializable(with = KotlinLocalDateSerializer::class) // Beispiel für Serializer @Serializable(with = KotlinLocalDateSerializer::class) // Beispiel für Serializer
var datumVon: LocalDate, var datumVon: LocalDate,

View File

@ -1,15 +0,0 @@
package at.mocode.model.serializer
import com.ionspin.kotlin.bignum.decimal.BigDecimal
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
object BigDecimalSerializer : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toStringExpanded())
override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal.parseString(decoder.decodeString())
}

View File

@ -1,12 +0,0 @@
package at.mocode.model.serializer
import com.benasher44.uuid.Uuid
import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
object JavaUUIDSerializer : KSerializer<Uuid> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Uuid) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Uuid = Uuid.fromString(decoder.decodeString())
}

View File

@ -1,15 +0,0 @@
package at.mocode.model.serializer
import kotlinx.datetime.Instant
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
object KotlinInstantSerializer : KSerializer<Instant> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Instant) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Instant = Instant.parse(decoder.decodeString())
}

View File

@ -1,15 +0,0 @@
package at.mocode.model.serializer
import kotlinx.datetime.LocalDate
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
object KotlinLocalDateSerializer : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalDate = LocalDate.parse(decoder.decodeString())
}

View File

@ -1,15 +0,0 @@
package at.mocode.model.serializer
import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
object KotlinLocalDateTimeSerializer : KSerializer<LocalDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalDateTime = LocalDateTime.parse(decoder.decodeString())
}

View File

@ -0,0 +1,44 @@
package at.mocode.model.serializers
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuidFrom
import com.ionspin.kotlin.bignum.decimal.BigDecimal
import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDateTime
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
object BigDecimalSerializer : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toStringExpanded())
override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal.parseString(decoder.decodeString())
}
object UuidSerializer : KSerializer<Uuid> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Uuid) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Uuid = uuidFrom(decoder.decodeString())
}
object KotlinInstantSerializer : KSerializer<Instant> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: Instant) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): Instant = Instant.parse(decoder.decodeString())
}
object KotlinLocalDateSerializer : KSerializer<LocalDate> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDate) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalDate = LocalDate.parse(decoder.decodeString())
}
object KotlinLocalDateTimeSerializer : KSerializer<LocalDateTime> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: LocalDateTime) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): LocalDateTime = LocalDateTime.parse(decoder.decodeString())
}

View File

@ -2,7 +2,7 @@ package at.mocode.model.stammdaten
import at.mocode.model.enums.LizenzTyp import at.mocode.model.enums.LizenzTyp
import at.mocode.model.enums.Sparte import at.mocode.model.enums.Sparte
import at.mocode.model.serializer.KotlinLocalDateSerializer import at.mocode.model.serializers.KotlinLocalDateSerializer
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable

View File

@ -2,16 +2,20 @@ package at.mocode.model.stammdaten
import at.mocode.model.enums.FunktionaerRolle import at.mocode.model.enums.FunktionaerRolle
import at.mocode.model.enums.Geschlecht import at.mocode.model.enums.Geschlecht
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.serializers.KotlinInstantSerializer
import at.mocode.model.serializer.KotlinInstantSerializer import at.mocode.model.serializers.KotlinLocalDateSerializer
import at.mocode.model.serializer.KotlinLocalDateSerializer import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.datetime.LocalDate import kotlinx.datetime.LocalDate
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Person( data class Person(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
var oepsSatzNr: String?, var oepsSatzNr: String?,
var nachname: String, var nachname: String,
var vorname: String, var vorname: String,
@ -25,8 +29,8 @@ data class Person(
var adresse: String?, var adresse: String?,
var plz: String?, var plz: String?,
var ort: String?, var ort: String?,
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var stammVereinId: UUID?, // FK zum Verein var stammVereinId: Uuid?, // FK zum Verein
var mitgliedsNummerIntern: String?, var mitgliedsNummerIntern: String?,
var letzteZahlungJahr: Int?, var letzteZahlungJahr: Int?,
var feiId: String?, var feiId: String?,

View File

@ -1,14 +1,18 @@
package at.mocode.model.stammdaten package at.mocode.model.stammdaten
import at.mocode.model.enums.GeschlechtPferd import at.mocode.model.enums.GeschlechtPferd
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.serializers.KotlinInstantSerializer
import at.mocode.model.serializer.KotlinInstantSerializer import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Pferd( data class Pferd(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
var oepsKopfNr: String?, var oepsKopfNr: String?,
var oepsSatzNr: String?, var oepsSatzNr: String?,
var name: String, var name: String,
@ -21,12 +25,12 @@ data class Pferd(
var vaterName: String?, var vaterName: String?,
var mutterName: String?, var mutterName: String?,
var mutterVaterName: String?, var mutterVaterName: String?,
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var besitzerId: UUID?, // FK Person var besitzerId: Uuid?, // FK Person
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var verantwortlichePersonId: UUID?, // FK Person var verantwortlichePersonId: Uuid?, // FK Person
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
var heimatVereinId: UUID?, // FK Verein var heimatVereinId: Uuid?, // FK Verein
var letzteZahlungJahrOeps: Int?, var letzteZahlungJahrOeps: Int?,
var stockmassCm: Int?, var stockmassCm: Int?,
var istAktiv: Boolean = true, var istAktiv: Boolean = true,

View File

@ -1,14 +1,17 @@
package at.mocode.model.stammdaten package at.mocode.model.stammdaten
import at.mocode.model.serializer.JavaUUIDSerializer import at.mocode.model.serializers.KotlinInstantSerializer
import at.mocode.model.serializer.KotlinInstantSerializer import at.mocode.model.serializers.UuidSerializer
import com.benasher44.uuid.UUID import com.benasher44.uuid.Uuid
import com.benasher44.uuid.uuid4
import kotlinx.datetime.Clock
import kotlinx.datetime.Instant
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
data class Verein( data class Verein(
@Serializable(with = JavaUUIDSerializer::class) @Serializable(with = UuidSerializer::class)
val id: UUID = UUID.randomUUID(), val id: Uuid = uuid4(),
var oepsVereinsNr: String, var oepsVereinsNr: String,
var name: String, var name: String,
var kuerzel: String?, var kuerzel: String?,

View File

@ -1,7 +0,0 @@
package at.mocode
class JVMPlatform: Platform {
override val name: String = "Java ${System.getProperty("java.version")}"
}
actual fun getPlatform(): Platform = JVMPlatform()

View File

@ -1,22 +0,0 @@
package at.mocode.model
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.math.BigDecimal
import java.util.*
object JavaUUIDSerializer : KSerializer<UUID> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: UUID) = encoder.encodeString(value.toString())
override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString())
}
object BigDecimalSerializer : KSerializer<BigDecimal> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("BigDecimal", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: BigDecimal) = encoder.encodeString(value.toPlainString())
override fun deserialize(decoder: Decoder): BigDecimal = BigDecimal(decoder.decodeString())
}

View File

@ -1,7 +0,0 @@
package at.mocode
class WasmPlatform: Platform {
override val name: String = "Web with Kotlin/Wasm"
}
actual fun getPlatform(): Platform = WasmPlatform()