@startuml skinparam handwritten false skinparam monochrome false skinparam packageStyle rectangle skinparam shadowing false hide empty members title Domain Model: Umbenennung & Erweiterung (Soll-Zustand) package "Event Management Context" { class Veranstaltung <> { + id: UUID + name: String + ort: String + startDatum: LocalDate + endDatum: LocalDate -- ZNS.zip Upload (Stammdaten) -- } class Austragungsplatz { + id: UUID + name: String (z.B. "Waldarena") + typ: String ("Austragungsplatz", "Vorbereitungsplatz") + sparte: SparteE [0..1] } class Turnier { + id: UUID + turnierNummer: String (z.B. "26128") + sparte: SparteE + kategorie: TurnierkategorieE + nennschluss: DateTime + einschraenkungen: List -- n2-xxxxx.dat Upload -- + turnierbeauftragterId: UUID } class Ausschreibung { + id: UUID + titel: String + status: AusschreibungsStatusE } } package "Billing Context" { class TurnierArtikel { + id: UUID + name: String (z.B. "Ansage", "Heu") + preis: Money + typ: String ("AUTOMATISCH", "MANUELL") } class Konto { + id: UUID + saldo: Money } } package "Competition Context" { class Bewerb { + id: UUID + bewerbNummer: Int (z.B. 14) + bezeichnung: String (z.B. "Standardspringprüfung") + beschreibung: String (z.B. "Pony Einsteiger Cup") + klasse: String (z.B. "LM") + richtverfahren: PruefungsTypE + aufgabe: String (z.B. "R1") + geldpreisAusbezahlt: Boolean + reitdauerMinuten: Int + umbauMinuten: Int + besichtigungMinuten: Int -- + teilungsTyp: AbteilungsTeilungsTypE (+ MANUELL) } class RichterEinsatz { + funktionaerId: UUID + position: String (z.B. "C", "Aufsicht") } class Abteilung { + id: UUID + abteilungsNummer: Int + bezeichnung: String } } package "Registration Context" { class Nennung { + id: UUID + status: NennStatusE + istNachnennung: Boolean + reiterId: UUID + pferdId: UUID } class NennungsTransfer { + id: UUID + ursprungsNennungId: UUID + neueNennungId: UUID } } package "Actor Context (Masterdata)" { class Reiter { + id: UUID + name: String } class Pferd { + id: UUID + name: String } class Funktionaer { + id: UUID + name: String } } Veranstaltung "1" *-- "N" Austragungsplatz Veranstaltung "1" *-- "N" TurnierArtikel Veranstaltung "1" *-- "N" Turnier Turnier "1" *-- "1" Ausschreibung Turnier "1" *-- "N" Bewerb Bewerb "1" *-- "N" Abteilung Bewerb "1" *-- "N" RichterEinsatz Bewerb "N" --> "1" Austragungsplatz : "findet statt auf" Abteilung "1" <-- "N" Nennung : "teilt zu" Bewerb "1" <.. "N" Nennung : "meldet für (Denormalisiert)" Nennung "1" <-- "N" NennungsTransfer : "dokumentiert Storno/Umbuchung" TurnierArtikel "1" <-- "N" Konto : "bucht" note right of Bewerb **Namens-Konvention (Das "Dom"-Präfix):** Aktuell heißt diese Klasse im Code z.B. `DomBewerb` (in entries-domain) und `Bewerb` (in entries-service/Repository). Der Prefix `Dom` wurde zur Unterscheidung von DTOs (Data Transfer Objects) und DB-Entities genutzt. Ist es clever das zu ändern? -> Ja! In Clean Architecture sollte die Kern-Domäne den "sauberen" Namen tragen (`Bewerb`). Die DB-Klasse heißt dann `BewerbEntity` bzw. `BewerbTable` und das Transfer-Objekt `BewerbDto`. Das gleiche gilt für `DomVeranstaltung` -> `Veranstaltung`, `DomTurnier` -> `Turnier`, `DomAusschreibung` -> `Ausschreibung`, `DomAbteilung` -> `Abteilung`, `DomNennung` -> `Nennung` und `DomNennungsTransfer` -> `NennungsTransfer`. end note @enduml