feat: add Backend mit allen aktuellen features + Demo Daten

This commit is contained in:
Robert Wartenberg committed 2026-08-28 16:35:59 +02:00
1 parent a78e84515a
commit e122aa8650
17 files changed
+704 -238

No files matched your search

+38 -7
View File
@@ -80,12 +80,13 @@ sowie klar erkennbare Demo-Termine. Die API prüft Kapazitäten innerhalb einer
Transaktion und sperrt den Termin dabei mit `SELECT … FOR UPDATE`; parallele
Anmeldungen können dadurch die Kapazität nicht überschreiten.
Die Demo speichert eine gültige Anmeldung direkt als `confirmed`. Sie hat
bewusst noch **keinen** Mailversand, kein Double-Opt-in, keine Erinnerungen,
keinen ICS-Feed und keine Verwaltungsoberfläche. Die Anzeige benennt diesen
Umstand ausdrücklich. Ein Produktiveinsatz erfordert außerdem die in den
SOLL-Dokumenten genannten Entscheidungen zu Art. 13 DSGVO, Löschfristen,
Mailbetrieb, Rollen/Berechtigungen und Missbrauchsschutz.
Die Demo speichert eine Anfrage zunächst als `pending_confirmation`. Sie
erstellt einen zeitlich begrenzten Bestätigungslink, bestätigt danach atomar
gegen die verfügbare Kapazität und erzeugt eine zweite Bestätigungsnachricht.
Bestätigungs- und Erinnerungsnachrichten liegen standardmäßig im lokalen
Mailausgang der Testverwaltung. Mit `BOOKING_MAIL_TRANSPORT=mail` versucht der
Job den Versand über die PHP-Funktion `mail()`; SMTP-Konfiguration und echter
Mailbetrieb gehören erst in die Produktiventscheidung.
Der Browser erhält ein CSRF-Token per gleicher Sitzung; die API validiert alle
Pflichtdaten serverseitig und begrenzt Anmeldungen pro Sitzung. Dies ist eine
@@ -134,9 +135,39 @@ X-SUFW-Booking-CSRF: <csrfToken-aus-dem-GET>
Für ein PS-`Probearbeiten` mit `introductionRequired: true` müssen
`introductionAttended` den Wert `true` und `introductionDate` ein gültiges
Datum im Format `YYYY-MM-DD` enthalten. Bei Erfolg antwortet die Demo mit
`201 Created`; bei einem inzwischen ausgebuchten oder doppelt gebuchten Termin
`202 Accepted`; bei einem inzwischen ausgebuchten oder doppelt gebuchten Termin
mit `409 Conflict`; fehlerhafte Pflichtangaben erhalten `422`.
Der Link ruft `GET /booking/confirm.php?token=<Token>` auf. Erst dort wird die
Teilnahme in den Status `confirmed` überführt. Nicht bestätigte Anfragen laufen
nach 30 Minuten ab.
## Eigenständiges PHP-Backend
Die Testverwaltung läuft unabhängig von Contao unter
<http://localhost:8080/booking-admin/>. Sie bietet für PW und PS:
- Termin anlegen, bearbeiten sowie aktivieren/deaktivieren,
- Übersicht und Entfernen von Teilnahmen,
- lokaler Mailausgang mit kopierbarem Bestätigungslink,
- Anzeige bestätigter Teilnahmen nach frei wählbarem Zeitraum,
- abonnierbaren ICS-Feed je Projekt,
- manuellen Lauf der Ablauf- und Erinnerungsjobs.
Der Verwaltungsbereich hat absichtlich keine Benutzerverwaltung
und darf nicht unverändert außerhalb der Testumgebung bereitgestellt werden.
Er ist eine eigenständige PHP-Seite, keine Contao-Komponente.
Die zeitgesteuerten Aufgaben können zusätzlich ohne Browser ausgeführt werden:
```powershell
docker compose exec app php scripts/Run-BookingJobs.php
```
Für einen späteren Betrieb muss dieser Aufruf als geplanter Job erfolgen. Die
ICS-Adresse zeigt die Testverwaltung an; sie enthält nur Terminmetadaten und
keine Daten der Teilnehmenden.
## Zwei Einbindungswege
Die Terminbuchungskomponente hat eine Vorschau auf einem Webseiten-Nachbau der Orginalseite: