meldestelle/docs/04_Agents/Roadmaps/Backend_Roadmap.md
Stefan Mogeritsch 2270f9602f feat(api): extend Masterdata API with CRUD endpoints for Pferde and Funktionäre
- Added full CRUD support for Pferde (list, search, get by ID, create, update, delete) with filters for Jahrgang and BesitzerId.
- Introduced FunktionaerController, offering CRUD operations for Funktionäre (list, search, get by ID, create, update, delete) with filtering by Rolle.
- Enhanced HorseController and ReiterController with updated data models, additional request validation, and detailed filtering options.
- Extended backend configurations to register new controllers and route handlers.
- Updated roadmaps and progress documents to reflect completed Sprint B-1 tasks.

Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
2026-04-03 10:12:36 +02:00

105 lines
5.0 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] — Zwischenstand & Roadmap
> **Stand:** 3. April 2026
> **Rolle:** Spring Boot / Ktor, Kotlin, SQL, API-Design, Datenbankschema, Services
---
## ✅ Erledigte Sprints
### Sprint A (Teilweise) — Abgeschlossene Punkte
- [x] **A-2** | Datenbankschema: Domänen-Hierarchie umgesetzt
- [x] Tabellen `veranstaltungen`, `turniere`, `bewerbe`, `abteilungen` mit FK-Ketten
- [x] `teilnehmer_konten` (Veranstaltungsebene), `turnier_kassa` (Turnierebene)
- [x] Flyway-Migrationen V1V3 (inkl. Turnier-Status `DRAFT`/`PUBLISHED`)
- [x] `DomainHierarchyMigrationTest` grün
---
## 🔴 Sprint A — Offen (höchste Priorität)
- [x] **A-1** | Tenant-Isolation vollständig ausrollen ⚠️ BLOCKER
- [x] ADR-0021 übernommen; `TenantWebFilter`, `TenantRegistry` (JDBC) implementiert
- [x] Entries Service: `JdbcTenantRegistry`, `TenantMigrationsRunner`, MDC-Logging
- [x] Flyway pro Tenant-Schema; Unit-Tests (`JdbcTenantRegistryTest`) grün
- [x] **Rollout auf weitere Services** — masterdata/events/zns-import nutzen kein eigenes Tenant-Schema (
Single-Tenant-Architektur per ADR-0021 korrekt; nur Entries-Service ist Multi-Tenant)
- [x] E2E-Isolationstest re-enabled (`@Disabled` entfernt; `EntriesIsolationIntegrationTest` aktiv)
- [ ] **A-3** | Validierungs-Grundlage: Turnierkategorie-Limits
- [x] Entkoppelte Policy-Schnittstelle + Bewerb-Descriptor implementiert
- [x] Konkrete ÖTO-Regeln/Limits umgesetzt (eigene Policy-Implementierung)
- [ ] Sonderregeln aus 📜 Rulebook B-2 Spezifikation einarbeiten (wartet auf Übergabe)
---
## 🟠 Sprint B — Priorität 2 (diese Woche)
- [x] **B-1** | CRUD-Endpunkte vervollständigen
- [x] `Veranstaltung`: GET, PUT
- [x] `Turniere`: POST, GET, GET{id}, PUT, DELETE, PATCH /status
- [x] `Bewerbe`: POST, GET, GET{id}, PUT, DELETE
- [x] `Abteilungen`: POST, GET, GET{id}, PUT, DELETE
- [x] Konsistentes Error-Format (`problem+json`); Service-Guardrails für `PUBLISHED`-Lock
- [x] **`Reiter`**: GET (Liste/Suche/Einzeln/Satznummer), POST, PUT, DELETE — Filter: `lizenzKlasse`, `vereinId`
- [x] **`Pferde`**: GET (Liste/Suche/Einzeln/Lebensnummer), POST, PUT, DELETE — Filter: `jahrgang`, `besitzerId`
- [x] **`Vereine`**: GET (Liste/Suche/Einzeln/Nummer), POST, PUT, DELETE — Filter: `verband` (Bundesland)
- [x] **`Funktionäre`**: GET (Liste/Suche/Einzeln/Richternummer), POST, PUT, DELETE — Filter: `rolle`
- [ ] OpenAPI-Dokumentation (Springdoc) veröffentlichen
- [ ] E2E-Tests: CRUD-Flows Turnier → Bewerb → Abteilung inkl. FK-Constraints
- [ ] **B-2** | Kassa-Service implementieren
- [ ] `TeilnehmerKonto`-Service: Saldo aus mehreren Turnieren aggregieren
- [ ] `Zahlvorgang`-Service: 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 B-2 umsetzen (wartet auf Übergabe)
- [ ] OEPS-Nummern-Format, FEI-ID-Format validieren
- [ ] Lizenzklassen-Validierung (R1R4, LZF)
- [ ] Altersklassen-Kompatibilität Pferd × Bewerb
- [ ] Abteilungs-Zwangsteilung CSN-C-NEU (≤95cm: ohne/mit Lizenz; ≥100cm: R1/R2+)
---
## 🟡 Sprint C — Priorität 3 (nächste Woche)
- [ ] **C-1** | Nennungs-Service (Grundstruktur)
- [ ] Tabelle `nennungen` anlegen (FK → `abteilung_id`, Status-Automat)
- [ ] `NennungsService`: Erstellen, Prüfen, Bestätigen, Ablehnen
- [ ] Nennungs-Workflow-Endpunkte
- [ ] **C-2** | Stammdaten-Seeder
- [ ] Initiale Testdaten (Reiter, Pferde, Vereine) für Entwicklungsumgebung
- [ ] Seed-Skript in `config/scripts/` ablegen
- [ ] **C-3** | LAN-Sync-Endpunkte (ADR-0022 ✅ freigegeben)
- [ ] `SyncEvent`-Datenmodell in `core`-Modul definieren (KMP-shared, Phase 1)
- [ ] SQLDelight-Tabellen `sync_events`, `sync_snapshots` anlegen
- [ ] `LamportClock`-Implementierung (thread-safe, persistent)
- [ ] WebSocket-Server auf Meldestelle-Desk (Ktor): HELLO/HELLO_ACK/SYNC_DELTA/SYNC_PUSH
- [ ] mDNS-Discovery-Service integrieren (gemäß ADR-0020)
- [ ] Domänen-Mastership-Validierung im Event-Handler
- [ ] Reconnect-Logik mit Delta-Sync (`lastKnownSeq`)
---
## 📌 Abhängigkeiten
| Warte auf | Von wem | Betrifft |
|----------------------------------------|-------------|-----------------|
| Rulebook B-2 Spezifikation | 📜 Rulebook | A-3, B-3 |
| ~~ADR-0022 (LAN-Sync)~~ | ✅ Erledigt | C-3 freigegeben |
---
## 💡 Empfehlungen (nach Priorität)
1. **A-3 / B-3 Sonderregeln & ÖTO-Validierung** — Warten auf Rulebook B-2 Übergabe; Validator-Interface-Grundstruktur
kann schon vorbereitet werden.
2. **B-1 OpenAPI** — Springdoc-Dokumentation für alle neuen Endpunkte (Reiter/Pferde/Vereine/Funktionäre)
veröffentlichen.
3. **B-2 Kassa-Service** — Nächster großer Block nach Abschluss der CRUD-Endpunkte.