diff --git a/docs/01_Architecture/c4/Kernentitaeten_Umbenennung.puml b/docs/01_Architecture/c4/Kernentitaeten_Umbenennung.puml new file mode 100644 index 00000000..292d7049 --- /dev/null +++ b/docs/01_Architecture/c4/Kernentitaeten_Umbenennung.puml @@ -0,0 +1,158 @@ +@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