meldestelle/docs/01_Architecture/_archive/Kernentitaeten_Umbenennung.puml
Stefan Mogeritsch 276e3cc3dd docs(c4): migrate architecture diagrams to draw.io and refine container/workflow visualizations
- Replaced outdated `.puml` and `.mermaid` diagrams with modernized `.drawio` versions for enhanced clarity.
- Added `container_diagram.drawio` to depict offline-first architecture and backend synchronization workflow.
- Introduced `workflow_turnieranlage.drawio` to visualize the tournament creation process (3-step wizard).
- Archived legacy diagrams under `docs/01_Architecture/_archive` for reference.
2026-04-09 11:32:06 +02:00

159 lines
3.9 KiB
Plaintext

@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 <<Tenant Boundary>> {
+ 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<TeilnehmerKreisE>
-- 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