tooling: make .junie/.gemini docs-first (remove legacy guidelines)

This commit is contained in:
2026-01-13 14:32:49 +01:00
parent 696c2e0bd8
commit ff0e1a36cc
66 changed files with 347 additions and 8923 deletions
@@ -0,0 +1,26 @@
@startuml C4_Context
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
title Systemkontext-Diagramm für Meldestelle
Person(eventOrganizer, "Veranstaltungsorganisator", "Organisiert und verwaltet Reitsportveranstaltungen")
Person(administrator, "Administrator", "Verwaltet Systemkonfiguration und Stammdaten")
Person(member, "Mitglied", "Meldet sich für Veranstaltungen an und verwaltet persönliche Informationen")
Person(horseOwner, "Pferdebesitzer", "Registriert und verwaltet Pferdeinformationen")
System(meldestelle, "Meldestelle", "Modulares System zur Verwaltung von Pferdesportveranstaltungen, einschließlich Registrierung von Pferden, Mitgliedern und Veranstaltungen")
System_Ext(paymentProvider, "Zahlungsanbieter", "Verarbeitet Zahlungen für Veranstaltungsanmeldungen")
System_Ext(emailSystem, "E-Mail-System", "Sendet Benachrichtigungen und Bestätigungen")
System_Ext(federationSystem, "Reitsportverband-System", "Bietet Validierung von Mitgliedschaften und Pferden")
Rel(eventOrganizer, meldestelle, "Erstellt und verwaltet Veranstaltungen mit")
Rel(administrator, meldestelle, "Konfiguriert und administriert")
Rel(member, meldestelle, "Meldet sich für Veranstaltungen an und aktualisiert persönliche Informationen mit")
Rel(horseOwner, meldestelle, "Registriert und verwaltet Pferde mit")
Rel(meldestelle, paymentProvider, "Verarbeitet Zahlungen über")
Rel(meldestelle, emailSystem, "Sendet Benachrichtigungen über")
Rel(meldestelle, federationSystem, "Validiert Mitgliedschaften und Pferde mit")
@enduml
@@ -0,0 +1,75 @@
@startuml C4_Container
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
title Container-Diagramm für Meldestelle
Person(eventOrganizer, "Veranstaltungsorganisator", "Organisiert und verwaltet Reitsportveranstaltungen")
Person(administrator, "Administrator", "Verwaltet Systemkonfiguration und Stammdaten")
Person(member, "Mitglied", "Meldet sich für Veranstaltungen an und verwaltet persönliche Informationen")
Person(horseOwner, "Pferdebesitzer", "Registriert und verwaltet Pferdeinformationen")
System_Boundary(meldestelle, "Meldestelle") {
Container(desktopApp, "Desktop-Anwendung", "Kotlin, Compose Multiplatform", "Bietet eine umfangreiche Benutzeroberfläche für Administratoren und Veranstaltungsorganisatoren")
Container(webApp, "Web-Anwendung", "Kotlin, Compose Multiplatform", "Bietet eine Weboberfläche für Mitglieder und Pferdebesitzer")
Container(apiGateway, "API-Gateway", "Kotlin, Spring Cloud Gateway", "Leitet Anfragen an entsprechende Dienste weiter, verwaltet Authentifizierung und Autorisierung")
Container(masterdataService, "Stammdaten-Dienst", "Kotlin, Spring Boot", "Verwaltet Stammdaten wie Standorte, Disziplinen usw.")
Container(membersService, "Mitglieder-Dienst", "Kotlin, Spring Boot", "Verwaltet Mitgliederregistrierung und -profile")
Container(horsesService, "Pferde-Dienst", "Kotlin, Spring Boot", "Verwaltet Pferderegistrierung und -informationen")
Container(eventsService, "Veranstaltungs-Dienst", "Kotlin, Spring Boot", "Verwaltet Veranstaltungserstellung, -planung und -anmeldungen")
ContainerDb(postgresql, "PostgreSQL", "Datenbank", "Speichert alle persistenten Daten")
ContainerDb(redis, "Redis", "Cache", "Bietet Caching für häufig abgerufene Daten")
Container(kafka, "Kafka", "Message Broker", "Verarbeitet ereignisgesteuerte Kommunikation zwischen Diensten")
Container(keycloak, "Keycloak", "Authentifizierungsserver", "Verwaltet Benutzerauthentifizierung und -autorisierung")
Container(monitoring, "Monitoring", "Prometheus, Grafana, Zipkin", "Bietet Überwachung, Metriken und verteiltes Tracing")
}
System_Ext(paymentProvider, "Zahlungsanbieter", "Verarbeitet Zahlungen für Veranstaltungsanmeldungen")
System_Ext(emailSystem, "E-Mail-System", "Sendet Benachrichtigungen und Bestätigungen")
System_Ext(federationSystem, "Reitsportverband-System", "Bietet Validierung von Mitgliedschaften und Pferden")
Rel(eventOrganizer, desktopApp, "Verwendet")
Rel(administrator, desktopApp, "Verwendet")
Rel(member, webApp, "Verwendet")
Rel(horseOwner, webApp, "Verwendet")
Rel(desktopApp, apiGateway, "Stellt API-Aufrufe an", "HTTPS/JSON")
Rel(webApp, apiGateway, "Stellt API-Aufrufe an", "HTTPS/JSON")
Rel(apiGateway, masterdataService, "Leitet Anfragen weiter an", "HTTPS/JSON")
Rel(apiGateway, membersService, "Leitet Anfragen weiter an", "HTTPS/JSON")
Rel(apiGateway, horsesService, "Leitet Anfragen weiter an", "HTTPS/JSON")
Rel(apiGateway, eventsService, "Leitet Anfragen weiter an", "HTTPS/JSON")
Rel(apiGateway, keycloak, "Authentifiziert mit", "HTTPS/JSON")
Rel(masterdataService, postgresql, "Liest von und schreibt in")
Rel(membersService, postgresql, "Liest von und schreibt in")
Rel(horsesService, postgresql, "Liest von und schreibt in")
Rel(eventsService, postgresql, "Liest von und schreibt in")
Rel(masterdataService, redis, "Speichert Daten im Cache")
Rel(membersService, redis, "Speichert Daten im Cache")
Rel(horsesService, redis, "Speichert Daten im Cache")
Rel(eventsService, redis, "Speichert Daten im Cache")
Rel(masterdataService, kafka, "Veröffentlicht und abonniert Ereignisse")
Rel(membersService, kafka, "Veröffentlicht und abonniert Ereignisse")
Rel(horsesService, kafka, "Veröffentlicht und abonniert Ereignisse")
Rel(eventsService, kafka, "Veröffentlicht und abonniert Ereignisse")
Rel(masterdataService, monitoring, "Sendet Metriken und Traces an")
Rel(membersService, monitoring, "Sendet Metriken und Traces an")
Rel(horsesService, monitoring, "Sendet Metriken und Traces an")
Rel(eventsService, monitoring, "Sendet Metriken und Traces an")
Rel(apiGateway, monitoring, "Sendet Metriken und Traces an")
Rel(eventsService, paymentProvider, "Verarbeitet Zahlungen über", "HTTPS/JSON")
Rel(membersService, emailSystem, "Sendet Benachrichtigungen über", "SMTP")
Rel(eventsService, emailSystem, "Sendet Benachrichtigungen über", "SMTP")
Rel(membersService, federationSystem, "Validiert Mitgliedschaften mit", "HTTPS/JSON")
Rel(horsesService, federationSystem, "Validiert Pferde mit", "HTTPS/JSON")
@enduml
@@ -0,0 +1,63 @@
@startuml C4_Component
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
title Komponenten-Diagramm für Veranstaltungs-Dienst
Container_Boundary(apiGateway, "API-Gateway") {
Component(apiGatewayRouting, "Routing-Komponente", "Ktor Routing", "Leitet Anfragen an entsprechende Dienste weiter")
Component(apiGatewayAuth, "Authentifizierungs-Komponente", "Ktor Auth", "Verwaltet Authentifizierung und Autorisierung")
}
Container_Boundary(eventsService, "Veranstaltungs-Dienst") {
Component(eventsApi, "Veranstaltungs-API", "Kotlin, Spring Web", "Definiert die REST-API-Endpunkte für die Veranstaltungsverwaltung")
Component(eventsApplication, "Veranstaltungs-Anwendung", "Kotlin, Spring", "Enthält Anwendungsdienste und Anwendungsfälle")
Component(eventCommandHandlers, "Veranstaltungs-Befehlshandler", "Kotlin", "Verarbeitet Befehle zum Erstellen und Ändern von Veranstaltungen")
Component(eventQueryHandlers, "Veranstaltungs-Abfragehandler", "Kotlin", "Verarbeitet Abfragen zum Abrufen von Veranstaltungsinformationen")
Component(eventsDomain, "Veranstaltungs-Domäne", "Kotlin", "Enthält Domänenmodelle und Geschäftslogik")
Component(eventAggregate, "Veranstaltungs-Aggregat", "Kotlin", "Kern-Domänenentität, die eine Veranstaltung repräsentiert")
Component(participantAggregate, "Teilnehmer-Aggregat", "Kotlin", "Kern-Domänenentität, die einen Teilnehmer repräsentiert")
Component(eventDomainServices, "Veranstaltungs-Domänendienste", "Kotlin", "Domänendienste für komplexe Geschäftslogik")
Component(eventsInfrastructure, "Veranstaltungs-Infrastruktur", "Kotlin, Spring Data", "Enthält Infrastrukturimplementierungen")
Component(eventRepository, "Veranstaltungs-Repository", "Kotlin, Spring Data JPA", "Speichert und ruft Veranstaltungsdaten ab")
Component(eventMessagePublisher, "Veranstaltungs-Nachrichtenveröffentlicher", "Kotlin, Spring Kafka", "Veröffentlicht Domänenereignisse an Kafka")
Component(externalServiceClients, "Externe Dienst-Clients", "Kotlin, WebClient", "Clients für externe Dienste")
}
ContainerDb(postgresql, "PostgreSQL", "Datenbank", "Speichert alle persistenten Daten")
Container(kafka, "Kafka", "Message Broker", "Verarbeitet ereignisgesteuerte Kommunikation zwischen Diensten")
Container(redis, "Redis", "Cache", "Bietet Caching für häufig abgerufene Daten")
System_Ext(paymentProvider, "Zahlungsanbieter", "Verarbeitet Zahlungen für Veranstaltungsanmeldungen")
System_Ext(emailSystem, "E-Mail-System", "Sendet Benachrichtigungen und Bestätigungen")
Rel(apiGatewayRouting, eventsApi, "Leitet Anfragen weiter an", "HTTPS/JSON")
Rel(apiGatewayAuth, eventsApi, "Stellt Authentifizierungskontext bereit für")
Rel(eventsApi, eventsApplication, "Verwendet")
Rel(eventsApplication, eventCommandHandlers, "Verwendet")
Rel(eventsApplication, eventQueryHandlers, "Verwendet")
Rel(eventCommandHandlers, eventsDomain, "Verwendet")
Rel(eventQueryHandlers, eventsDomain, "Verwendet")
Rel(eventCommandHandlers, eventsInfrastructure, "Verwendet")
Rel(eventQueryHandlers, eventsInfrastructure, "Verwendet")
Rel(eventsDomain, eventAggregate, "Enthält")
Rel(eventsDomain, participantAggregate, "Enthält")
Rel(eventsDomain, eventDomainServices, "Enthält")
Rel(eventsInfrastructure, eventRepository, "Enthält")
Rel(eventsInfrastructure, eventMessagePublisher, "Enthält")
Rel(eventsInfrastructure, externalServiceClients, "Enthält")
Rel(eventRepository, postgresql, "Liest von und schreibt in")
Rel(eventMessagePublisher, kafka, "Veröffentlicht Nachrichten an")
Rel(eventQueryHandlers, redis, "Speichert Ergebnisse im Cache")
Rel(externalServiceClients, paymentProvider, "Stellt API-Aufrufe an", "HTTPS/JSON")
Rel(externalServiceClients, emailSystem, "Sendet E-Mails über", "SMTP")
@enduml
@@ -0,0 +1,80 @@
@startuml
!define table(x) entity x << (T, white) >>
!define primary_key(x) <b><color:#b8861b><&key></color> x</b>
!define foreign_key(x) <color:#aaaaaa><&key></color> x
skinparam linetype ortho
table(Turnier) {
primary_key(turnier_id)
--
name: varchar
start_datum: date
end_datum: date
ort: varchar
kategorie_oeto: varchar
}
table(Bewerb) {
primary_key(bewerb_id)
--
foreign_key(turnier_id)
nummer: varchar
disziplin: varchar
klasse: varchar
nenngeld: decimal
}
table(Person) {
primary_key(person_id)
--
vorname: varchar
nachname: varchar
lizenznummer: varchar
}
table(Pferd) {
primary_key(pferd_id)
--
foreign_key(besitzer_person_id)
name: varchar
lebensnummer: varchar
}
table(Nennung) {
primary_key(nennung_id)
--
foreign_key(bewerb_id)
foreign_key(person_id)
foreign_key(pferd_id)
status: varchar
nennungs_datum: timestamp
}
table(Startplatz) {
primary_key(startplatz_id)
--
foreign_key(nennung_id)
startnummer: int
startzeit: time
status: varchar
}
table(Ergebnis) {
primary_key(ergebnis_id)
--
foreign_key(startplatz_id)
wertnote: decimal
fehler: int
zeit: time
platzierung: int
}
Turnier ||--o{ Bewerb
Bewerb }o--o{ Nennung
Person }o--o{ Nennung
Pferd }o--o{ Nennung
Person }o..o{ Pferd
Nennung ||--|{ Startplatz
Startplatz ||--|{ Ergebnis
@enduml