feat: add Backend mit allen aktuellen features + Demo Daten
This commit is contained in:
1 parent
a78e84515a
commit
e122aa8650
17 files changed
+704
-238
No files matched your search
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user