meldestelle/docs/01_Architecture/adr/0028-plan-b-email-based-online-nennung.md
StefanMoCoAt 5baa971b46 ### docs: aktualisiere ADR 0028 für E-Mail-basiertes Routing
- Ersetze Catch-All-Ansatz durch Betreff-basiertes Routing.
- Reduziere Infrastruktur-Aufwände durch generische Zieladresse.
2026-04-22 15:18:35 +02:00

36 lines
3.3 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.

# ADR 0028: Plan-B - Fallback auf E-Mail-basierte Online-Nennung (MVP)
**Status:** Angenommen
**Datum:** 2026-04-22
**Entscheider:** Lead Architect, Product Owner
## Kontext
Ursprünglich war geplant, dass die Desktop-App vollständig integriert mit dem ZNS die Konfiguration von Turnieren ermöglicht. Daraus sollten automatisch Web-Formulare für die Online-Nennung generiert werden. Die Entwicklung dieser komplexen End-to-End-Strecke inklusive ZNS-Synchronisation und Formular-Generierung ist zeitlich in Verzug geraten. Das Kernziel die rechtzeitige Bereitstellung einer funktionierenden Online-Nennung für Teilnehmer ist gefährdet.
Gleichzeitig haben Tests ergeben, dass der aktuelle Mailserver (World4You) das sogenannte "Plus-Addressing" (z.B. `online-nennen+26128@...`) nativ nicht unterstützt (Fehler: `550 Unknown User`), weshalb ein robusterer Mechanismus für das Mail-Routing pro Turnier gefunden werden muss.
## Entscheidung
Wir setzen das Prinzip der **Graceful Degradation** an und wechseln für das Online-Nenn-System auf einen pragmatischen **MVP (Plan-B)**:
1. **Entkopplung:** Die Web-App wird vorerst nicht dynamisch aus der Desktop-App/ZNS-Datenstruktur generiert.
2. **Statische Frontend-Formulare:** Wir erstellen einfache, statische (oder semi-statische) Nenn-Formulare im Web (WasmJs) mit grundlegender clientseitiger Validierung (Pflichtfelder).
3. **E-Mail als Integrationsschicht:** Das Backend dient lediglich als "Form-to-Email-Gateway". Wenn ein Teilnehmer das Formular absendet (`POST` Request mit JSON-Payload), generiert das Backend eine strukturierte E-Mail.
4. **Betreff-basiertes Routing statt Catch-All/Plus-Addressing:** Um jegliche Infrastruktur-Änderungen beim Hoster zu vermeiden, senden wir alle Nennungen an die generische Adresse `online-nennen@mo-code.at`. Die Trennung pro Turnier erfolgt zwingend über den **Betreff der E-Mail** (z.B. `[NENNUNG] Turnier-ID: 26128`). Im Posteingang können dann einfache Filter/Regeln eingerichtet werden.
## Konsequenzen
### Positiv
* **Time-to-Market:** Die Kernanforderung (Nennungen empfangen) kann extrem schnell umgesetzt und deployt werden.
* **Stabilität:** Das System ist hochgradig ausfallsicher. Es gibt keine komplexe DB-Synchronisation, die im Live-Betrieb abbrechen könnte.
* **Kein Blocker für Desktop-App:** Das Team kann ungestört weiter an der komplexen Desktop-ZNS-Integration arbeiten, während das Nenn-Problem für die User gelöst ist.
* **Keine Infrastruktur-Aufwände:** Weder Catch-All noch Alias-Verwaltung beim Hoster nötig. Ein einziges Standard-Postfach reicht.
### Negativ
* **Manueller Aufwand im Backoffice:** Nennungen kommen vorerst als E-Mails (Text/HTML) an und müssen (bis zu einer späteren Automatisierung) manuell oder per Skript aus dem Postfach ins eigentliche System übertragen werden.
* **Kein automatisiertes Setup:** Formulare müssen bei Bedarf per Hand im Frontend-Code oder einer einfachen Konfigurationsdatei angepasst werden.
## Nächste Schritte
1. `enableWasm=true` in `gradle.properties` aktivieren (erledigt).
2. Web-App (Frontend) mit einem minimalen "Hallo Du!"-Formular implementieren, das die Turnier-ID als Parameter hält.
3. Backend-Endpoint (`POST` to Mail) implementieren und SMTP anbinden. Die Turnier-ID muss zwingend in den Mail-Betreff geschrieben werden.
4. End-to-End-Test auf dem Staging/Prod-Server (Gitea Pipeline).