Files
meldestelle/docs/04_Agents/Roadmaps/Backend_Roadmap.md
T
stefan 7e16b3f318
Build and Publish Docker Images / build-and-push (., backend/infrastructure/gateway/Dockerfile, api-gateway, api-gateway) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., backend/services/ping/Dockerfile, ping-service, ping-service) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/caddy/web-app/Dockerfile, web-app, web-app) (push) Has been cancelled
Build and Publish Docker Images / build-and-push (., config/docker/keycloak/Dockerfile, keycloak, keycloak) (push) Has been cancelled
docs(roadmaps): add sprint execution order and detailed role-specific roadmaps
- Added `SPRINT_EXECUTION_ORDER.md` to define the cross-role sprint step sequence.
- Created individual roadmaps for Architect, Backend, Frontend, DevOps, Rulebook, QA, UI/UX, and Curator.
- Captured developer responsibilities, dependencies, and timelines for Sprints A–C.
- Aligned sprint planning documentation with session log agreements.
- Provided structured documentation in `docs/04_Agents/Roadmaps/`.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
2026-04-02 14:35:54 +02:00

97 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 👷 [Backend Developer] — Schritt-für-Schritt Roadmap
> **Stand:** 2. April 2026
> **Rolle:** Spring Boot / Ktor, Kotlin, SQL, API-Design, Datenbankschema, Services
---
## 🔴 Sprint A — Sofort (diese Woche)
> ⚠️ **Warten auf ADR-0021 vom Architect** bevor A-1 beginnt!
- [ ] **A-1** | Tenant-Isolation im Datenzugriffs-Layer implementieren
- [ ] ADR-0021 (Architect) lesen und Strategie übernehmen
- [ ] Tenant-Resolution-Mechanismus implementieren (wie erkennt das Backend die Ziel-Datenbank?)
- [ ] Alle Datenzugriffe mit Tenant-Kontext absichern
- [ ] Sicherstellen: Kein Cross-Tenant-Datenzugriff möglich
- [ ] **A-2** | Datenbankschema: Domänen-Hierarchie umsetzen
- [ ] Tabelle `veranstaltungen` anlegen (interne ID, Tenant-Grenze)
- [ ] Tabelle `turniere` anlegen (FK → `veranstaltung_id`, OEPS-Turniernummer als eigenes Feld)
- [ ] Tabelle `bewerbe` anlegen (FK → `turnier_id`, Klasse, Höhe, Bezeichnung)
- [ ] Tabelle `abteilungen` anlegen (FK → `bewerb_id`, `nr`, `bezeichnung`,
`typ: SEPARATE_SIEGEREHRUNG | ORGANISATORISCH`)
- [ ] Tabelle `teilnehmer_konten` anlegen (FK → `veranstaltung_id`, aggregiert Salden über Turniere)
- [ ] Tabelle `turnier_kassa` anlegen (FK → `turnier_id`, separate Kassa pro Turnier)
- [ ] Migrations-Skript schreiben und testen
- [ ] **A-3** | Validierungs-Grundlage: Turnierkategorie-Limits
- [ ] `Turnier.validate()`: Bewerbs-Klassen gegen Limits der Turnierkategorie prüfen (z.B. kein S-Springen auf
C-Turnier)
- [ ] Voraussetzung: Spezifikation von 📜 Rulebook Expert (A-5) abwarten
---
## 🟠 Sprint B — Kurzfristig (nächste Woche)
- [ ] **B-1** | CRUD-Endpunkte für alle Stammdaten-Entitäten
- [ ] `POST/GET/PUT/DELETE /veranstaltungen`
- [ ] `POST/GET/PUT/DELETE /turniere` (inkl. Status-Feld: `DRAFT | PUBLISHED`)
- [ ] `POST/GET/PUT/DELETE /bewerbe`
- [ ] `POST/GET/PUT/DELETE /abteilungen`
- [ ] `POST/GET/PUT/DELETE /reiter`
- [ ] `POST/GET/PUT/DELETE /pferde`
- [ ] `POST/GET/PUT/DELETE /vereine`
- [ ] `POST/GET/PUT/DELETE /funktionaere`
- [ ] **B-2** | Kassa-Service implementieren
- [ ] `TeilnehmerKonto`-Service: Saldo aus mehreren Turnieren aggregieren
- [ ] `Zahlvorgang`-Service: Eine Zahlung auf Veranstaltungs-Ebene buchen
- [ ] Rechnungs-Generierung: Separate Rechnung je Turnier aus einem Zahlvorgang
- [ ] Endpunkte: `GET /veranstaltungen/{id}/kassa/saldo`, `POST /veranstaltungen/{id}/zahlvorgaenge`
- [ ] **B-3** | ÖTO-Validierung serverseitig absichern
- [ ] Spezifikation von 📜 Rulebook Expert (Sprint A-5) umsetzen
- [ ] OEPS-Nummern-Format validieren
- [ ] FEI-ID-Format validieren
- [ ] Lizenzklassen-Validierung (R1R4, LZF)
- [ ] Altersklassen-Kompatibilität Pferd × Bewerb validieren
- [ ] Abteilungs-Zwangsteilung im CSN-C-NEU durchsetzen (Bewerb ≤95cm: ohne/mit Lizenz; ≥100cm: R1/R2+)
- [ ] **B-4** | Nennungs-Service (Grundstruktur)
- [ ] Tabelle `nennungen` anlegen (FK → `abteilung_id`, Status: `NEU | GEPRÜFT | BESTÄTIGT | ABGELEHNT`)
- [ ] `POST /turniere/{id}/nennungen` — Nennungs-Eingang vom Web-Formular
- [ ] `GET /turniere/{id}/nennungen` — Postfach für Desktop-App (Meldestelle)
- [ ] `PATCH /nennungen/{id}/status` — Bestätigen / Ablehnen
---
## 🟡 Sprint C — Mittelfristig (in 2 Wochen)
- [ ] **C-1** | Testdaten-Seeder implementieren
- [ ] Reproduzierbare Veranstaltung mit 2 Turnieren (Neumarkt-Szenario)
- [ ] Bewerbe mit korrekten Abteilungen (inkl. CSN-C-NEU Pflicht-Teilung)
- [ ] Reiter, Pferde, Vereine als Stammdaten
- [ ] Nennungen in verschiedenen Status-Stufen
- [ ] Seeder via Gradle-Task ausführbar
- [ ] **C-2** | Statistik-Endpunkte
- [ ] `GET /turniere/{id}/statistiken` — Statistiken pro Turnier
- [ ] `GET /veranstaltungen/{id}/statistiken` — Aggregierte Statistiken über alle Turniere
---
## 📌 Abhängigkeiten
| Warte auf | Von wem |
|------------------------------------------------|--------------------|
| ADR-0021 (Tenant-Strategie) | 🏗️ Architect |
| Validierungs-Spezifikation (OEPS, FEI, Lizenz) | 📜 Rulebook Expert |
| Domänen-Modell final | 🏗️ Architect |
| Meine Aufgabe | Ermöglicht wem |
|------------------------|--------------------------------|
| CRUD-Endpunkte (B-1) | 🎨 Frontend: Backend-Anbindung |
| Kassa-Service (B-2) | 🎨 Frontend: Kassa-Screen |
| Nennungs-Service (B-4) | 🎨 Frontend: Nennungs-Postfach |