From b513643b02f4eab8a6ae2f84ce6978fd3beee36b Mon Sep 17 00:00:00 2001 From: stefan Date: Tue, 6 May 2025 15:07:07 +0200 Subject: [PATCH] =?UTF-8?q?daten=20Klassen=20im=20shared=20Ordner=20erstel?= =?UTF-8?q?lt=20und=20gradle=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 5 +- gradle/libs.versions.toml | 67 +++++++++++++------ kotlin-js-store/yarn.lock | 5 ++ server/build.gradle.kts | 3 - .../main/kotlin/at/mocode/model/Nennung.kt | 16 ----- .../main/kotlin/at/mocode/model/Turnier.kt | 14 ---- .../kotlin/at/mocode/tables/TurniereTable.kt | 21 ++++++ shared/build.gradle.kts | 26 +++---- .../commonMain/kotlin/at/mocode/Greeting.kt | 9 --- .../commonMain/kotlin/at/mocode/Platform.kt | 7 -- .../at/mocode/model/entitaeten/Artikel.kt | 15 +++-- .../model/entitaeten/MeisterschaftReferenz.kt | 12 ++-- .../at/mocode/model/entitaeten/Platz.kt | 8 ++- .../at/mocode/model/entitaeten/Turnier.kt | 41 +++++------- .../mocode/model/entitaeten/Veranstaltung.kt | 15 +++-- .../model/serializer/BigDecimalSerializer.kt | 15 ----- .../model/serializer/JavaUUIDSerializer.kt | 12 ---- .../serializer/KotlinInstantSerializer.kt | 15 ----- .../serializer/KotlinLocalDateSerializer.kt | 15 ----- .../KotlinLocalDateTimeSerializer.kt | 15 ----- .../mocode/model/serializers/Serialization.kt | 44 ++++++++++++ .../at/mocode/model/stammdaten/LizenzInfo.kt | 2 +- .../at/mocode/model/stammdaten/Person.kt | 18 +++-- .../at/mocode/model/stammdaten/Pferd.kt | 24 ++++--- .../at/mocode/model/stammdaten/Verein.kt | 13 ++-- .../jvmMain/kotlin/at/mocode/Platform.jvm.kt | 7 -- .../kotlin/at/mocode/model/JvmSerializer.kt | 22 ------ .../kotlin/at/mocode/Platform.wasmJs.kt | 7 -- 28 files changed, 217 insertions(+), 256 deletions(-) delete mode 100644 server/src/main/kotlin/at/mocode/model/Nennung.kt delete mode 100644 server/src/main/kotlin/at/mocode/model/Turnier.kt create mode 100644 server/src/main/kotlin/at/mocode/tables/TurniereTable.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/Greeting.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/Platform.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/model/serializer/JavaUUIDSerializer.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinInstantSerializer.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateSerializer.kt delete mode 100644 shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateTimeSerializer.kt create mode 100644 shared/src/commonMain/kotlin/at/mocode/model/serializers/Serialization.kt delete mode 100644 shared/src/jvmMain/kotlin/at/mocode/Platform.jvm.kt delete mode 100644 shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt delete mode 100644 shared/src/wasmJsMain/kotlin/at/mocode/Platform.wasmJs.kt diff --git a/gradle.properties b/gradle.properties index 11a5b47e..79ed7444 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,10 @@ kotlin.code.style=official kotlin.daemon.jvmargs=-Xmx2048M #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 io.ktor.development=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ba1c9e12..d96612ac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,39 +1,54 @@ [versions] -androidx-lifecycle = "2.8.4" -compose-multiplatform = "1.7.3" -junit = "4.13.2" +# Kotlin and related libraries kotlin = "2.1.20" 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-tests = "2.3.13" -logback = "1.5.18" -junit-jupiter = "5.12.0" -junit-jupiter-version = "5.8.1" + +# Database exposed = "0.52.0" postgresql = "42.7.3" hikari = "5.1.0" 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] +# Kotlin and related libraries kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", 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-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-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"} - -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-html-builder = { module = "io.ktor:ktor-server-html-builder", 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-dao = { module = "org.jetbrains.exposed:exposed-dao", 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" } 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] +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" } 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" } -kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index a2734f57..f6c6e3ee 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -52,6 +52,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@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": version "2.0.5" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" diff --git a/server/build.gradle.kts b/server/build.gradle.kts index af4663c7..b1e1c287 100644 --- a/server/build.gradle.kts +++ b/server/build.gradle.kts @@ -22,9 +22,6 @@ dependencies { testImplementation(libs.ktor.server.tests) testImplementation(libs.kotlin.test.junit) testImplementation(libs.junit.jupiter) - testImplementation(libs.jupiter.junit.jupiter) - - testImplementation(libs.junit.junit.jupiter) // Exposed für Datenbankzugriff (Core, DAO-Pattern, JDBC-Implementierung) implementation(libs.exposed.core) diff --git a/server/src/main/kotlin/at/mocode/model/Nennung.kt b/server/src/main/kotlin/at/mocode/model/Nennung.kt deleted file mode 100644 index 0082c2cf..00000000 --- a/server/src/main/kotlin/at/mocode/model/Nennung.kt +++ /dev/null @@ -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! -) diff --git a/server/src/main/kotlin/at/mocode/model/Turnier.kt b/server/src/main/kotlin/at/mocode/model/Turnier.kt deleted file mode 100644 index 5e703109..00000000 --- a/server/src/main/kotlin/at/mocode/model/Turnier.kt +++ /dev/null @@ -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. -) diff --git a/server/src/main/kotlin/at/mocode/tables/TurniereTable.kt b/server/src/main/kotlin/at/mocode/tables/TurniereTable.kt new file mode 100644 index 00000000..954b3e65 --- /dev/null +++ b/server/src/main/kotlin/at/mocode/tables/TurniereTable.kt @@ -0,0 +1,21 @@ +package at.mocode.tables + +/* +object TurniereTable: Table("turniere") { + + val id: Column = varchar("id", 36).uniqueIndex() + + val veranstaltungId: Column = varchar("veranstaltungId", 36).uniqueIndex() + + val oepsTurnierNr: Column = varchar("oepsTurnierNr", 255) + + val titel: Column = varchar("titel", 255) + + val untertitel: Column = varchar("titel", 255).nullable() + + + + // Definiert die Spalte 'id' als Primärschlüssel für diese Tabelle + override val primaryKey = PrimaryKey(id) +} +*/ diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 2acba263..de67487f 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig plugins { alias(libs.plugins.kotlinMultiplatform) - kotlin("plugin.serialization") version libs.versions.kotlin.get() + alias(libs.plugins.kotlinSerialization) } kotlin { @@ -29,20 +29,20 @@ kotlin { sourceSets { val commonMain by getting { dependencies { - // put your Multiplatform dependencies here - implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.1") - implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.1") - implementation("com.benasher44:uuid:0.8.1") - implementation("com.ionspin.kotlin:bignum:0.3.8") + // Multiplatform dependencies + implementation(libs.kotlinx.serialization.json) + implementation(libs.kotlinx.datetime) + implementation(libs.uuid) + implementation(libs.bignum) } } - val jvmMain by getting { - dependsOn(commonMain) - } - - val wasmJsMain by getting { - dependsOn(commonMain) - } +// val jvmMain by getting { +// dependsOn(commonMain) +// } +// +// val wasmJsMain by getting { +// dependsOn(commonMain) +// } } } diff --git a/shared/src/commonMain/kotlin/at/mocode/Greeting.kt b/shared/src/commonMain/kotlin/at/mocode/Greeting.kt deleted file mode 100644 index af34bc49..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/Greeting.kt +++ /dev/null @@ -1,9 +0,0 @@ -package at.mocode - -class Greeting { - private val platform = getPlatform() - - fun greet(): String { - return "Hello, ${platform.name}!" - } -} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/at/mocode/Platform.kt b/shared/src/commonMain/kotlin/at/mocode/Platform.kt deleted file mode 100644 index deb5bcd7..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/Platform.kt +++ /dev/null @@ -1,7 +0,0 @@ -package at.mocode - -interface Platform { - val name: String -} - -expect fun getPlatform(): Platform \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt index 9bf2b163..fd4a02e7 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt @@ -1,14 +1,19 @@ package at.mocode.model.entitaeten -import at.mocode.model.serializer.BigDecimalSerializer -import at.mocode.model.serializer.JavaUUIDSerializer -import at.mocode.model.serializer.KotlinInstantSerializer +import at.mocode.model.serializers.BigDecimalSerializer +import at.mocode.model.serializers.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 @Serializable data class Artikel( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), var bezeichnung: String, @Serializable(with = BigDecimalSerializer::class) // Beispiel für Serializer var preis: BigDecimal, diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt index 27558fbf..9d3e7127 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt @@ -1,14 +1,16 @@ 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 @Serializable data class MeisterschaftReferenz( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), - @Serializable(with = JavaUUIDSerializer::class) - var meisterschaftId: UUID, // FK zu einer Meisterschafts-Entität + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), + @Serializable(with = UuidSerializer::class) + var meisterschaftId: Uuid, // FK zu einer Meisterschafts-Entität var name: String, var betrifftBewerbNummern: List, var berechnungsstrategie: String?, diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Platz.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Platz.kt index a39d549d..66e0bc32 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Platz.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Platz.kt @@ -1,13 +1,15 @@ package at.mocode.model.entitaeten 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 @Serializable data class Platz( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), var name: String, var dimension: String?, var boden: String?, diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt index 62d52f4a..e5f26a07 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt @@ -1,31 +1,22 @@ 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.serializer.* +import at.mocode.model.serializers.* +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.datetime.LocalDate import kotlinx.datetime.LocalDateTime import kotlinx.serialization.Serializable -import com.benasher44.uuid.Uuid as UUID @Serializable data class Turnier( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), - @Serializable(with = JavaUUIDSerializer::class) - var veranstaltungId: UUID, + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), + @Serializable(with = UuidSerializer::class) + var veranstaltungId: Uuid, var oepsTurnierNr: String, var titel: String, var untertitel: String?, @@ -44,17 +35,17 @@ data class Turnier( var startgeldStandard: BigDecimal?, var austragungsplaetze: List = emptyList(), var vorbereitungsplaetze: List = emptyList(), - @Serializable(with = JavaUUIDSerializer::class) - var turnierleiterId: UUID?, // FK zu Person - @Serializable(with = JavaUUIDSerializer::class) - var turnierbeauftragterId: UUID?, // FK zu Person - var richterIds: List<@Serializable(with = JavaUUIDSerializer::class)UUID> = emptyList(), // Pool an Richtern - var parcoursbauerIds: List<@Serializable(with = JavaUUIDSerializer::class)UUID> = emptyList(), // FKs zu Person - var parcoursAssistentIds: List<@Serializable(with = JavaUUIDSerializer::class)UUID> = emptyList(), // FKs zu Person + @Serializable(with = UuidSerializer::class) + var turnierleiterId: Uuid?, // FK zu Person + @Serializable(with = UuidSerializer::class) + var turnierbeauftragterId: Uuid?, // FK zu Person + var richterIds: List<@Serializable(with = UuidSerializer::class) Uuid> = emptyList(), // Pool an Richtern + var parcoursbauerIds: List<@Serializable(with = UuidSerializer::class) Uuid> = emptyList(), // FKs zu Person + var parcoursAssistentIds: List<@Serializable(with = UuidSerializer::class) Uuid> = emptyList(), // FKs zu Person var tierarztInfos: String?, var hufschmiedInfo: String?, - @Serializable(with = JavaUUIDSerializer::class) - var meldestelleVerantwortlicherId: UUID?, // FK zu Person + @Serializable(with = UuidSerializer::class) + var meldestelleVerantwortlicherId: Uuid?, // FK zu Person var meldestelleTelefon: String?, var meldestelleOeffnungszeiten: String?, var ergebnislistenUrl: String?, // Wird später meist system-generiert diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt index 4b50e79b..2ffdd6f3 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt @@ -1,13 +1,20 @@ package at.mocode.model.entitaeten -import at.mocode.model.serializer.JavaUUIDSerializer -import at.mocode.model.serializer.KotlinInstantSerializer +import at.mocode.model.enums.VeranstalterTyp +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 @Serializable data class Veranstaltung( - @Serializable(with = JavaUUIDSerializer::class) // Beispiel für Serializer, falls nötig - val id: UUID = UUID.randomUUID(), + @Serializable(with = UuidSerializer::class) // Beispiel für Serializer, falls nötig + val id: Uuid = uuid4(), var name: String, @Serializable(with = KotlinLocalDateSerializer::class) // Beispiel für Serializer var datumVon: LocalDate, diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt deleted file mode 100644 index eef062f4..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt +++ /dev/null @@ -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 { - 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()) -} diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializer/JavaUUIDSerializer.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializer/JavaUUIDSerializer.kt deleted file mode 100644 index 2654c73f..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/model/serializer/JavaUUIDSerializer.kt +++ /dev/null @@ -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 { - 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()) -} diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinInstantSerializer.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinInstantSerializer.kt deleted file mode 100644 index a9b277a9..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinInstantSerializer.kt +++ /dev/null @@ -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 { - 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()) -} diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateSerializer.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateSerializer.kt deleted file mode 100644 index 4ecfa124..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateSerializer.kt +++ /dev/null @@ -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 { - 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()) -} diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateTimeSerializer.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateTimeSerializer.kt deleted file mode 100644 index 82918415..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateTimeSerializer.kt +++ /dev/null @@ -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 { - 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()) -} diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializers/Serialization.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializers/Serialization.kt new file mode 100644 index 00000000..58b4327c --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/serializers/Serialization.kt @@ -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 { + 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 { + 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 { + 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 { + 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 { + 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()) +} diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/LizenzInfo.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/LizenzInfo.kt index 4f088581..ff9d0687 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/LizenzInfo.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/LizenzInfo.kt @@ -2,7 +2,7 @@ package at.mocode.model.stammdaten import at.mocode.model.enums.LizenzTyp import at.mocode.model.enums.Sparte -import at.mocode.model.serializer.KotlinLocalDateSerializer +import at.mocode.model.serializers.KotlinLocalDateSerializer import kotlinx.datetime.LocalDate import kotlinx.serialization.Serializable diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt index 2dc7175e..7ba5b9e4 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt @@ -2,16 +2,20 @@ package at.mocode.model.stammdaten import at.mocode.model.enums.FunktionaerRolle import at.mocode.model.enums.Geschlecht -import at.mocode.model.serializer.JavaUUIDSerializer -import at.mocode.model.serializer.KotlinInstantSerializer -import at.mocode.model.serializer.KotlinLocalDateSerializer +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 @Serializable data class Person( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), var oepsSatzNr: String?, var nachname: String, var vorname: String, @@ -25,8 +29,8 @@ data class Person( var adresse: String?, var plz: String?, var ort: String?, - @Serializable(with = JavaUUIDSerializer::class) - var stammVereinId: UUID?, // FK zum Verein + @Serializable(with = UuidSerializer::class) + var stammVereinId: Uuid?, // FK zum Verein var mitgliedsNummerIntern: String?, var letzteZahlungJahr: Int?, var feiId: String?, diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt index cfd283b4..8d285c07 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt @@ -1,14 +1,18 @@ package at.mocode.model.stammdaten import at.mocode.model.enums.GeschlechtPferd -import at.mocode.model.serializer.JavaUUIDSerializer -import at.mocode.model.serializer.KotlinInstantSerializer +import at.mocode.model.serializers.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 @Serializable data class Pferd( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), var oepsKopfNr: String?, var oepsSatzNr: String?, var name: String, @@ -21,12 +25,12 @@ data class Pferd( var vaterName: String?, var mutterName: String?, var mutterVaterName: String?, - @Serializable(with = JavaUUIDSerializer::class) - var besitzerId: UUID?, // FK Person - @Serializable(with = JavaUUIDSerializer::class) - var verantwortlichePersonId: UUID?, // FK Person - @Serializable(with = JavaUUIDSerializer::class) - var heimatVereinId: UUID?, // FK Verein + @Serializable(with = UuidSerializer::class) + var besitzerId: Uuid?, // FK Person + @Serializable(with = UuidSerializer::class) + var verantwortlichePersonId: Uuid?, // FK Person + @Serializable(with = UuidSerializer::class) + var heimatVereinId: Uuid?, // FK Verein var letzteZahlungJahrOeps: Int?, var stockmassCm: Int?, var istAktiv: Boolean = true, diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt index dcee706d..14c2058c 100644 --- a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt @@ -1,14 +1,17 @@ package at.mocode.model.stammdaten -import at.mocode.model.serializer.JavaUUIDSerializer -import at.mocode.model.serializer.KotlinInstantSerializer -import com.benasher44.uuid.UUID +import at.mocode.model.serializers.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 @Serializable data class Verein( - @Serializable(with = JavaUUIDSerializer::class) - val id: UUID = UUID.randomUUID(), + @Serializable(with = UuidSerializer::class) + val id: Uuid = uuid4(), var oepsVereinsNr: String, var name: String, var kuerzel: String?, diff --git a/shared/src/jvmMain/kotlin/at/mocode/Platform.jvm.kt b/shared/src/jvmMain/kotlin/at/mocode/Platform.jvm.kt deleted file mode 100644 index 01f5ea8b..00000000 --- a/shared/src/jvmMain/kotlin/at/mocode/Platform.jvm.kt +++ /dev/null @@ -1,7 +0,0 @@ -package at.mocode - -class JVMPlatform: Platform { - override val name: String = "Java ${System.getProperty("java.version")}" -} - -actual fun getPlatform(): Platform = JVMPlatform() \ No newline at end of file diff --git a/shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt b/shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt deleted file mode 100644 index 077e01ea..00000000 --- a/shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt +++ /dev/null @@ -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 { - 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 { - 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()) -} diff --git a/shared/src/wasmJsMain/kotlin/at/mocode/Platform.wasmJs.kt b/shared/src/wasmJsMain/kotlin/at/mocode/Platform.wasmJs.kt deleted file mode 100644 index 0cccfd78..00000000 --- a/shared/src/wasmJsMain/kotlin/at/mocode/Platform.wasmJs.kt +++ /dev/null @@ -1,7 +0,0 @@ -package at.mocode - -class WasmPlatform: Platform { - override val name: String = "Web with Kotlin/Wasm" -} - -actual fun getPlatform(): Platform = WasmPlatform() \ No newline at end of file