- 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.
159 lines
3.9 KiB
Plaintext
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
|