From da7afec9d755532445086f45d8dd05a26df3637e Mon Sep 17 00:00:00 2001 From: StefanMoCoAt Date: Wed, 8 Apr 2026 22:58:21 +0200 Subject: [PATCH] Add domain models: `Austragungsplatz`, `TurnierArtikel`, and `RichterEinsatz`. --- .../entries/domain/model/RichterEinsatz.kt | 23 +++++++++++++++ .../events/domain/model/Austragungsplatz.kt | 29 +++++++++++++++++++ .../events/domain/model/TurnierArtikel.kt | 28 ++++++++++++++++++ 3 files changed, 80 insertions(+) create mode 100644 backend/services/entries/entries-domain/src/main/kotlin/at/mocode/entries/domain/model/RichterEinsatz.kt create mode 100644 backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/Austragungsplatz.kt create mode 100644 backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/TurnierArtikel.kt diff --git a/backend/services/entries/entries-domain/src/main/kotlin/at/mocode/entries/domain/model/RichterEinsatz.kt b/backend/services/entries/entries-domain/src/main/kotlin/at/mocode/entries/domain/model/RichterEinsatz.kt new file mode 100644 index 00000000..8bb5fbac --- /dev/null +++ b/backend/services/entries/entries-domain/src/main/kotlin/at/mocode/entries/domain/model/RichterEinsatz.kt @@ -0,0 +1,23 @@ +@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) + +package at.mocode.entries.domain.model + +import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable +import kotlin.uuid.Uuid + +/** + * Value Object für den Einsatz eines Richters (Funktionärs) in einem Bewerb. + * + * Beschreibt, welcher Funktionär in welcher Funktion/Position bei einem Bewerb eingesetzt wird + * (z.B. Richter C, Aufsicht, Parcoursbauer). + * + * @property funktionaerId Referenz auf den Funktionär (UUID aus masterdata-context). + * @property position Positions-Bezeichnung gemäß ÖTO (z.B. "C", "M", "B", "Aufsicht"). + */ +@Serializable +data class RichterEinsatz( + @Serializable(with = UuidSerializer::class) + val funktionaerId: Uuid, + val position: String +) diff --git a/backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/Austragungsplatz.kt b/backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/Austragungsplatz.kt new file mode 100644 index 00000000..12b7ff19 --- /dev/null +++ b/backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/Austragungsplatz.kt @@ -0,0 +1,29 @@ +@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) + +package at.mocode.events.domain.model + +import at.mocode.core.domain.model.SparteE +import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable +import kotlin.uuid.Uuid + +/** + * Domain-Modell für einen Austragungsplatz innerhalb einer Veranstaltung. + * + * Ein Austragungsplatz ist ein physischer Ort (Platz, Arena, Halle), auf dem Bewerbe + * stattfinden. Er kann als Austragungsplatz (Wettkampf) oder Vorbereitungsplatz + * (Einreiten) klassifiziert sein. + * + * @property id Eindeutige interne ID (UUID). + * @property name Bezeichnung des Platzes (z.B. "Waldarena", "Vorbereitungsplatz Nord"). + * @property typ Klassifikation: "Austragungsplatz" oder "Vorbereitungsplatz". + * @property sparte Optionale Sparten-Zuordnung (z.B. nur für Springen genutzt). + */ +@Serializable +data class Austragungsplatz( + @Serializable(with = UuidSerializer::class) + val id: Uuid = Uuid.random(), + val name: String, + val typ: String, + val sparte: SparteE? = null +) diff --git a/backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/TurnierArtikel.kt b/backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/TurnierArtikel.kt new file mode 100644 index 00000000..00b3d680 --- /dev/null +++ b/backend/services/events/events-domain/src/main/kotlin/at/mocode/events/domain/model/TurnierArtikel.kt @@ -0,0 +1,28 @@ +@file:OptIn(kotlin.uuid.ExperimentalUuidApi::class) + +package at.mocode.events.domain.model + +import at.mocode.core.domain.serialization.UuidSerializer +import kotlinx.serialization.Serializable +import kotlin.uuid.Uuid + +/** + * Domain-Modell für einen Turnier-Artikel im Billing-Context. + * + * Ein TurnierArtikel repräsentiert eine abrechenbare Leistung oder ein Produkt, + * das im Rahmen einer Veranstaltung angeboten wird (z.B. Ansage, Heu, Startgeld). + * Preise werden in Cent gespeichert (Long), um Gleitkomma-Fehler zu vermeiden. + * + * @property id Eindeutige interne ID (UUID). + * @property name Bezeichnung des Artikels (z.B. "Ansage", "Heu", "Startgeld"). + * @property preis Preis in Cent (z.B. 1500 = 15,00 €). + * @property typ Klassifikation: "AUTOMATISCH" (systemseitig) oder "MANUELL" (manuell erfasst). + */ +@Serializable +data class TurnierArtikel( + @Serializable(with = UuidSerializer::class) + val id: Uuid = Uuid.random(), + val name: String, + val preis: Long, + val typ: String +)