@startuml title "Prozess & Event-Flow: Nennung wird abgegeben" !theme vibrant actor Reiter ' Die Teilnehmer sind unsere Bounded Contexts (Services) und ein Message Bus für Events. participant "API Gateway / Frontend" as Gateway participant "Nennungs_Context" as Nenn participant "Veranstaltungs_Context" as Veranst participant "Lizenzen_und_Qualifikationen_Context" as Lizenz queue "Message Bus" as Bus participant "Benachrichtigungs_Service" as Notify Reiter -> Gateway : POST /nennungen\n(reiterId, pferdId, pruefungAbteilungId) ' 1. Command wird an den zuständigen Context gesendet Gateway -> Nenn : **Command:** NennungAbgeben(daten) activate Nenn note right of Nenn: Empfängt den Befehl,\neine neue Nennung zu erstellen. ' 2. Synchrone Queries zur Validierung Nenn -> Veranst : **Query:** getPruefungsAnforderungen(pruefungAbteilungId) activate Veranst Veranst --> Nenn : anforderungen {erf. Lizenzen, erf. Alter, ...} deactivate Veranst note left of Nenn: Holt die aktuellen Anforderungen\nfür die genannte Prüfung. Nenn -> Lizenz : **Query:** hatStartberechtigung(reiterId, anforderungen) activate Lizenz Lizenz --> Nenn : {istBerechtigt: true} deactivate Lizenz note left of Nenn: Prüft die Startberechtigung des Reiters\ngegen die Anforderungen. ' 3. Interne Verarbeitung und Zustandsänderung alt Startberechtigung erteilt Nenn -> Nenn : Nennungs-Aggregat erstellen\n(Status: EINGEGANGEN) note right of Nenn: Die Nennung wird intern gespeichert.\nDie Transaktion ist hier abgeschlossen. ' 4. Asynchrones Event wird veröffentlicht Nenn ->> Bus : **Event:** NennungWurdeEingereicht {nennungId, reiterId, ...} note left of Bus: Das Event wird auf den Bus gelegt.\nDer Nennungs-Context ist nun fertig\nund muss nicht auf die Verarbeitung\ndes Events warten. Gateway --> Reiter : HTTP 202 Accepted (Nennung wird verarbeitet) ' 5. Andere Services reagieren auf das Event Bus ->> Notify : **Event:** NennungWurdeEingereicht activate Notify Notify -> Notify : Sende Bestätigungs-E-Mail an Reiter deactivate Notify else Startberechtigung nicht erteilt Nenn -> Gateway : Fehler: Startberechtigung fehlt (z.B. HTTP 400) Gateway --> Reiter : Fehlermeldung end deactivate Nenn @enduml