diff --git a/server/src/main/kotlin/at/mocode/Application.kt b/server/src/main/kotlin/at/mocode/Application.kt index b3e6e177..55a73609 100644 --- a/server/src/main/kotlin/at/mocode/Application.kt +++ b/server/src/main/kotlin/at/mocode/Application.kt @@ -1,6 +1,6 @@ package at.mocode -import at.mocode.model.Turnier +import at.mocode.model.entitaeten.Turnier import at.mocode.plugins.configureDatabase import at.mocode.tables.TurniereTable import io.ktor.http.* diff --git a/server/src/test/kotlin/at/mocode/ApplicationTest.kt b/server/src/test/kotlin/at/mocode/ApplicationTest.kt index efebaac2..421b83a0 100644 --- a/server/src/test/kotlin/at/mocode/ApplicationTest.kt +++ b/server/src/test/kotlin/at/mocode/ApplicationTest.kt @@ -1,6 +1,6 @@ package at.mocode -import at.mocode.model.Turnier +import at.mocode.model.entitaeten.Turnier import kotlinx.html.* import kotlinx.html.stream.appendHTML import java.io.StringWriter diff --git a/server/src/test/kotlin/at/mocode/TestDatabase.kt b/server/src/test/kotlin/at/mocode/TestDatabase.kt index 6f238d59..5e793eea 100644 --- a/server/src/test/kotlin/at/mocode/TestDatabase.kt +++ b/server/src/test/kotlin/at/mocode/TestDatabase.kt @@ -1,6 +1,6 @@ package at.mocode -import at.mocode.model.Turnier +import at.mocode.model.entitaeten.Turnier import at.mocode.tables.TurniereTable import io.ktor.http.* import io.ktor.server.application.* diff --git a/shared/build.gradle.kts b/shared/build.gradle.kts index 1f2d8b53..2acba263 100644 --- a/shared/build.gradle.kts +++ b/shared/build.gradle.kts @@ -31,6 +31,9 @@ kotlin { 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") } } diff --git a/shared/src/commonMain/kotlin/at/mocode/model/Nennung.kt b/shared/src/commonMain/kotlin/at/mocode/model/Nennung.kt deleted file mode 100644 index 600956cd..00000000 --- a/shared/src/commonMain/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! -) \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/at/mocode/model/Turnier.kt b/shared/src/commonMain/kotlin/at/mocode/model/Turnier.kt deleted file mode 100644 index 16c256aa..00000000 --- a/shared/src/commonMain/kotlin/at/mocode/model/Turnier.kt +++ /dev/null @@ -1,13 +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 zum Ausschreibung-PDF - // Hier können später viele weitere Felder hinzukommen: - // Ort, Veranstalter, Status (geplant, läuft, beendet), Disziplinen etc. -) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt new file mode 100644 index 00000000..9bf2b163 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Artikel.kt @@ -0,0 +1,21 @@ +package at.mocode.model.entitaeten + +import at.mocode.model.serializer.BigDecimalSerializer +import at.mocode.model.serializer.JavaUUIDSerializer +import at.mocode.model.serializer.KotlinInstantSerializer +import kotlinx.serialization.Serializable + +@Serializable +data class Artikel( + @Serializable(with = JavaUUIDSerializer::class) + val id: UUID = UUID.randomUUID(), + var bezeichnung: String, + @Serializable(with = BigDecimalSerializer::class) // Beispiel für Serializer + var preis: BigDecimal, + var einheit: String, + var istVerbandsabgabe: Boolean = false, + @Serializable(with = KotlinInstantSerializer::class) + val createdAt: Instant = Clock.System.now(), + @Serializable(with = KotlinInstantSerializer::class) + var updatedAt: Instant = Clock.System.now() +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt new file mode 100644 index 00000000..27558fbf --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/MeisterschaftReferenz.kt @@ -0,0 +1,16 @@ +package at.mocode.model.entitaeten + +import at.mocode.model.serializer.JavaUUIDSerializer +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 + var name: String, + var betrifftBewerbNummern: List, + var berechnungsstrategie: String?, + var reglementUrl: 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 new file mode 100644 index 00000000..a39d549d --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Platz.kt @@ -0,0 +1,15 @@ +package at.mocode.model.entitaeten + +import at.mocode.model.enums.PlatzTyp +import at.mocode.model.serializer.JavaUUIDSerializer +import kotlinx.serialization.Serializable + +@Serializable +data class Platz( + @Serializable(with = JavaUUIDSerializer::class) + val id: UUID = UUID.randomUUID(), + var name: String, + var dimension: String?, + var boden: String?, + var typ: PlatzTyp +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt new file mode 100644 index 00000000..62d52f4a --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Turnier.kt @@ -0,0 +1,69 @@ +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 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, + var oepsTurnierNr: String, + var titel: String, + var untertitel: String?, + @Serializable(with = KotlinLocalDateSerializer::class) + var datumVon: LocalDate, + @Serializable(with = KotlinLocalDateSerializer::class) + var datumBis: LocalDate, + @Serializable(with = KotlinLocalDateTimeSerializer::class) // Beispiel + var nennungsschluss: LocalDateTime?, + var nennungsArt: List = emptyList(), + var nennungsHinweis: String?, + var eigenesNennsystemUrl: String?, + @Serializable(with = BigDecimalSerializer::class) + var nenngeld: BigDecimal?, + @Serializable(with = BigDecimalSerializer::class) + 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 + var tierarztInfos: String?, + var hufschmiedInfo: String?, + @Serializable(with = JavaUUIDSerializer::class) + var meldestelleVerantwortlicherId: UUID?, // FK zu Person + var meldestelleTelefon: String?, + var meldestelleOeffnungszeiten: String?, + var ergebnislistenUrl: String?, // Wird später meist system-generiert + var verfuegbareArtikel: List = emptyList(), // Zur Auswahl für die Kassa + var meisterschaftRefs: List = emptyList(), + // var cupRefs: List = emptyList(), + // var sonderpruefungRefs: List = emptyList(), + @Serializable(with = KotlinInstantSerializer::class) + val createdAt: Instant = Clock.System.now(), + @Serializable(with = KotlinInstantSerializer::class) + var updatedAt: Instant = Clock.System.now() +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt new file mode 100644 index 00000000..4b50e79b --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/entitaeten/Veranstaltung.kt @@ -0,0 +1,35 @@ +package at.mocode.model.entitaeten + +import at.mocode.model.serializer.JavaUUIDSerializer +import at.mocode.model.serializer.KotlinInstantSerializer +import kotlinx.serialization.Serializable + +@Serializable +data class Veranstaltung( + @Serializable(with = JavaUUIDSerializer::class) // Beispiel für Serializer, falls nötig + val id: UUID = UUID.randomUUID(), + var name: String, + @Serializable(with = KotlinLocalDateSerializer::class) // Beispiel für Serializer + var datumVon: LocalDate, + @Serializable(with = KotlinLocalDateSerializer::class) + var datumBis: LocalDate, + var veranstalterName: String, + var veranstalterOepsNummer: String?, + var veranstalterTyp: VeranstalterTyp = VeranstalterTyp.UNBEKANNT, + var veranstaltungsortName: String, + var veranstaltungsortAdresse: String, + var kontaktpersonName: String?, + var kontaktTelefon: String?, + var kontaktEmail: String?, + var webseite: String?, + var logoUrl: String?, + var anfahrtsplanInfo: String?, + var sponsorInfos: List = emptyList(), + var dsgvoText: String?, + var haftungsText: String?, + var sonstigeBesondereBestimmungen: String?, + @Serializable(with = KotlinInstantSerializer::class) // Beispiel für Serializer + val createdAt: Instant = Clock.System.now(), + @Serializable(with = KotlinInstantSerializer::class) + var updatedAt: Instant = Clock.System.now() +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/enums/Enums.kt b/shared/src/commonMain/kotlin/at/mocode/model/enums/Enums.kt new file mode 100644 index 00000000..0beb38be --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/enums/Enums.kt @@ -0,0 +1,28 @@ +package at.mocode.model.enums + +import kotlinx.serialization.Serializable + +@Serializable +enum class VeranstalterTyp { VEREIN, FIRMA, PRIVATPERSON, SONSTIGE, UNBEKANNT } +@Serializable +enum class PlatzTyp { AUSTRAGUNG, VORBEREITUNG, LONGIEREN, SONSTIGES } +@Serializable +enum class NennungsArt { OEPS_ZNS, EIGENES_ONLINE, DIREKT_VERANSTALTER_EMAIL, DIREKT_VERANSTALTER_TELEFON, DIREKT_VERANSTALTER_WHATSAPP, SONSTIGE } +@Serializable +enum class Sparte { DRESSUR, SPRINGEN, VIELSEITIGKEIT, FAHREN, VOLTIGIEREN, WESTERN, DISTANZ, ISLAND, PFERDESPORT_SPIEL, BASIS, KOMBINIERT, SONSTIGES } +@Serializable +enum class BewerbStatus { GEPLANT, OFFEN_FUER_NENNUNG, GESCHLOSSEN_FUER_NENNUNG, LAEUFT, ABGESCHLOSSEN, ABGESAGT } +@Serializable +enum class Bedingungstyp { LIZENZ_REITER, LIZENZ_FAHRER, ALTER_PFERD, ALTER_REITER, RASSE_PFERD, GESCHLECHT_PFERD, GESCHLECHT_REITER, STARTKARTE, SONSTIGES } +@Serializable +enum class Operator { GLEICH, UNGLEICH, MINDESTENS, MAXIMAL, ZWISCHEN, IN_LISTE, NICHT_IN_LISTE } +@Serializable +enum class FunktionaerRolle { RICHTER, PARCOURSBAUER, PARCOURSBAU_ASSISTENT, TECHN_DELEGIERTER, TURNIERBEAUFTRAGTER, STEWARD, ZEITNEHMER, SCHREIBER, VERANSTALTER_KONTAKT, TURNIERLEITER, HELFER, SONSTIGE } +@Serializable +enum class RichterPosition { BEI_C, BEI_E, BEI_H, BEI_M, BEI_B, VORSITZ, SEITENRICHTER, SONSTIGE } +@Serializable +enum class Geschlecht { M, W, D, UNBEKANNT } +@Serializable +enum class LizenzTyp { REITER, FAHRER, VOLTIGIERER, WESTERN, WORKING_EQUITATION, POLO, STARTKARTE_ALLG, STARTKARTE_VOLTIGIEREN, STARTKARTE_WESTERN, STARTKARTE_ISLAND, STARTKARTE_FAHREN_JUGEND, STARTKARTE_HORSEBALL, STARTKARTE_POLO, PARAEQUESTRIAN, SONSTIGE } +@Serializable +enum class GeschlechtPferd { HENGST, STUTE, WALLACH, UNBEKANNT } diff --git a/shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt b/shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt new file mode 100644 index 00000000..eef062f4 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/serializer/BigDecimalSerializer.kt @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..2654c73f --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/serializer/JavaUUIDSerializer.kt @@ -0,0 +1,12 @@ +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 new file mode 100644 index 00000000..a9b277a9 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinInstantSerializer.kt @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..4ecfa124 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateSerializer.kt @@ -0,0 +1,15 @@ +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 new file mode 100644 index 00000000..82918415 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/serializer/KotlinLocalDateTimeSerializer.kt @@ -0,0 +1,15 @@ +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/stammdaten/LizenzInfo.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/LizenzInfo.kt new file mode 100644 index 00000000..4f088581 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/LizenzInfo.kt @@ -0,0 +1,17 @@ +package at.mocode.model.stammdaten + +import at.mocode.model.enums.LizenzTyp +import at.mocode.model.enums.Sparte +import at.mocode.model.serializer.KotlinLocalDateSerializer +import kotlinx.datetime.LocalDate +import kotlinx.serialization.Serializable + +@Serializable +data class LizenzInfo( + val lizenzTyp: LizenzTyp, + val stufe: String?, + val sparte: Sparte?, + val gueltigBisJahr: Int?, // Jahr als Int + @Serializable(with = KotlinLocalDateSerializer::class) + val ausgestelltAm: LocalDate? +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt new file mode 100644 index 00000000..2dc7175e --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Person.kt @@ -0,0 +1,44 @@ +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 kotlinx.datetime.LocalDate +import kotlinx.serialization.Serializable + +@Serializable +data class Person( + @Serializable(with = JavaUUIDSerializer::class) + val id: UUID = UUID.randomUUID(), + var oepsSatzNr: String?, + var nachname: String, + var vorname: String, + var titel: String?, + @Serializable(with = KotlinLocalDateSerializer::class) + var geburtsdatum: LocalDate?, + var geschlecht: Geschlecht? = Geschlecht.UNBEKANNT, + var nationalitaet: String?, // 3-Letter Code + var email: String?, + var telefon: String?, + var adresse: String?, + var plz: String?, + var ort: String?, + @Serializable(with = JavaUUIDSerializer::class) + var stammVereinId: UUID?, // FK zum Verein + var mitgliedsNummerIntern: String?, + var letzteZahlungJahr: Int?, + var feiId: String?, + var istGesperrt: Boolean = false, + var sperrGrund: String?, + var rollen: Set = emptySet(), + var lizenzen: List = emptyList(), + var qualifikationenRichter: List = emptyList(), + var qualifikationenParcoursbauer: List = emptyList(), + var istAktiv: Boolean = true, + @Serializable(with = KotlinInstantSerializer::class) + val createdAt: Instant = Clock.System.now(), + @Serializable(with = KotlinInstantSerializer::class) + var updatedAt: Instant = Clock.System.now() +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt new file mode 100644 index 00000000..cfd283b4 --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Pferd.kt @@ -0,0 +1,37 @@ +package at.mocode.model.stammdaten + +import at.mocode.model.enums.GeschlechtPferd +import at.mocode.model.serializer.JavaUUIDSerializer +import at.mocode.model.serializer.KotlinInstantSerializer +import kotlinx.serialization.Serializable + +@Serializable +data class Pferd( + @Serializable(with = JavaUUIDSerializer::class) + val id: UUID = UUID.randomUUID(), + var oepsKopfNr: String?, + var oepsSatzNr: String?, + var name: String, + var lebensnummer: String?, + var feiPassNr: String?, + var geschlecht: GeschlechtPferd?, + var geburtsjahr: Int?, + var rasse: String?, + var farbe: String?, + 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 + var letzteZahlungJahrOeps: Int?, + var stockmassCm: Int?, + var istAktiv: Boolean = true, + @Serializable(with = KotlinInstantSerializer::class) + val createdAt: Instant = Clock.System.now(), + @Serializable(with = KotlinInstantSerializer::class) + var updatedAt: Instant = Clock.System.now() +) diff --git a/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt new file mode 100644 index 00000000..dcee706d --- /dev/null +++ b/shared/src/commonMain/kotlin/at/mocode/model/stammdaten/Verein.kt @@ -0,0 +1,27 @@ +package at.mocode.model.stammdaten + +import at.mocode.model.serializer.JavaUUIDSerializer +import at.mocode.model.serializer.KotlinInstantSerializer +import com.benasher44.uuid.UUID +import kotlinx.serialization.Serializable + +@Serializable +data class Verein( + @Serializable(with = JavaUUIDSerializer::class) + val id: UUID = UUID.randomUUID(), + var oepsVereinsNr: String, + var name: String, + var kuerzel: String?, + var bundesland: String?, + var adresse: String?, + var plz: String?, + var ort: String?, + var email: String?, + var telefon: String?, + var webseite: String?, + var istAktiv: Boolean = true, + @Serializable(with = KotlinInstantSerializer::class) + val createdAt: Instant = Clock.System.now(), + @Serializable(with = KotlinInstantSerializer::class) + var updatedAt: Instant = Clock.System.now() +) diff --git a/shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt b/shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt new file mode 100644 index 00000000..077e01ea --- /dev/null +++ b/shared/src/jvmMain/kotlin/at/mocode/model/JvmSerializer.kt @@ -0,0 +1,22 @@ +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()) +}