# Cronjobs

Produktionsbasis: `/var/www/ksbdueren` (bei abweichendem Deployment-Pfad anpassen).
Ausgaben sollten durch die Serverkonfiguration in ein überwachtes Log geschrieben werden.

## Wartelistenangebote (alle 5 Minuten)

### Bewegungszentrum-Kursbuchungen

```bash
php bin/console app:expire-course-waitlist-offers
```

- **Zweck:** Abgelaufene 24-Stunden-Platzangebote freigeben und den Platz im gleichen
  Datums-/Zeitslot-Kontext FIFO an den nächsten passenden Eintrag weitergeben.
- **Option:** `--dry-run` zählt abgelaufene Angebote, ohne Datenbankänderung oder E-Mail-Versand.
- **Exit-Code:** `0` bei erfolgreicher Verarbeitung, `1` bei einem Verarbeitungsfehler.

### Schwimmkurs-Terminbuchungen

```bash
php bin/console app:expire-appointment-waitlist-offers
```

- **Zweck:** Abgelaufene 24-Stunden-Reservierungen freigeben und je Termin FIFO an den nächsten
  Eintrag weitergeben, sofern Kapazität vorhanden ist.
- **Option:** `--dry-run` zählt abgelaufene Angebote, ohne Datenbankänderung oder E-Mail-Versand.
- **Exit-Code:** `0` bei erfolgreicher Verarbeitung, `1` bei einem Verarbeitungsfehler.

Empfohlene Crontab-Einträge:

```cron
*/5 * * * * cd /var/www/ksbdueren && php bin/console app:expire-course-waitlist-offers
*/5 * * * * cd /var/www/ksbdueren && php bin/console app:expire-appointment-waitlist-offers
```

Vor der ersten Aktivierung beide Commands einmal mit `--dry-run` ausführen. Die Migration
`Version20260720160000` muss zuvor regulär im Deployment ausgeführt worden sein.

Weitere historische Cron-Beispiele stehen in `cron-examples.md` im Projektroot; Messenger-Worker
für asynchrone Termin-Mails (`SendAppointmentMailMessage`) bleibt nötig.

## Manueller Wartelisten-E2E-Test

```bash
php bin/console app:waitlist:e2e-test --system=both
# Optionen: --system=bz|swim|both  --email=...  --keep  --skip-mail
```

Legt einen ausgebuchten Testkurs / Testtermin an, bucht auf die Warteliste, storniert den
Beleger, vergibt Angebot, Claimt und räumt Testdaten auf (ohne `--keep`).
werden separat gemäß `START_MESSENGER_WORKER.md` betrieben.
