Alle PlaybooksBooking Platform

Ein Erinnerungsfenster hinzufügen

Eine zusätzliche Erinnerung senden, zum Beispiel eine Woche vor dem Termin, ohne doppelte oder verspätete E-Mails.

Wann du es brauchst

Das Produkt braucht eine Erinnerung zu einem anderen Zeitpunkt als den vorhandenen (24 Stunden und 2 Stunden vor dem Termin), zum Beispiel 7 Tage vorher.

Regeln, die gelten bleiben

  • Die Erinnerungslogik ist rein und liegt in src/lib/booking/reminders.ts; der Cron-Workflow lädt nur Daten und stellt zu.
  • Eine Zustellung wird in reminder_deliveries reserviert, bevor die E-Mail versendet wird: nie zuerst senden und danach eintragen.
  • Nach einer Umbuchung ändert sich die revision der Buchung und die Erinnerungen werden erneut fällig. reminderKey nicht umgehen.

Schritte

  1. Füge das neue Fenster zu reminderKinds in src/lib/booking/reminders.ts hinzu. Halte die Liste vom entferntesten zum nächsten Fenster sortiert: Stand der Cron still, sendet dueReminders nur den letzten passenden Eintrag, also den nächsten. Für eine Woche vorher kommt { kind: "7d", minutesBefore: 7 * 24 * 60 } an den Anfang.
  2. ReminderKind wird aus der Liste abgeleitet, daher verlangt TypeScript nun einen Betreff in reminderSubjects (src/lib/booking/workflows.ts). Schreibe ihn in der Sprache des Produkts.
  3. In sendDueReminders lädt die Abfrage nur Buchungen, die innerhalb von 24 * 60 + 1 Minuten beginnen. Ersetze den festen Wert durch das größte minutesBefore aus reminderKinds plus eine Minute, sonst wird das neue Fenster nie erreicht.
  4. Eine Migration ist nicht nötig: reminder_deliveries.kind ist Text und der Primärschlüssel (booking_id, kind, revision) macht jede neue Art bereits idempotent.
  5. Ergänze Tests in test/notifications.test.ts für das neue Fenster:
    • es wird fällig, sobald die Buchung das Fenster erreicht;
    • eine innerhalb des Fensters angelegte Buchung erhält es nicht;
    • bei stillstehendem Cron wird nur die nächste Erinnerung gesendet;
    • eine neue revision macht sie erneut fällig.

Fertig, wenn

  • die Prüfbefehle erfolgreich laufen;
  • die neuen Tests die vier genannten Fälle abdecken;
  • sendDueReminders kein fest eingetragenes Fenster mehr enthält.