Tutti i playbookBooking Platform

Aggiungere una finestra di promemoria

Invia un promemoria in più, per esempio una settimana prima dell'appuntamento, senza email doppie o in ritardo.

Quando usarlo

Il prodotto ha bisogno di un promemoria in un momento diverso da quelli già previsti (24 ore e 2 ore prima dell'appuntamento), per esempio 7 giorni prima.

Regole da rispettare

  • La logica dei promemoria è pura e vive in src/lib/booking/reminders.ts; il workflow del cron si limita a caricare i dati e consegnare.
  • Una consegna viene registrata in reminder_deliveries prima dell'invio dell'email: mai inviare prima e registrare dopo.
  • Dopo una riprogrammazione la revision della prenotazione cambia e i promemoria tornano dovuti. Non aggirare reminderKey.

Passi

  1. Aggiungi la nuova finestra a reminderKinds in src/lib/booking/reminders.ts. Mantieni la lista ordinata dalla finestra più lontana alla più vicina: se il cron è rimasto fermo, dueReminders invia solo l'ultima voce valida, cioè la più vicina. Per una settimana prima, { kind: "7d", minutesBefore: 7 * 24 * 60 } va in testa.
  2. ReminderKind deriva dalla lista, quindi TypeScript chiede l'oggetto dell'email in reminderSubjects (src/lib/booking/workflows.ts). Scrivilo nella lingua del prodotto.
  3. In sendDueReminders la query carica solo le prenotazioni che iniziano entro 24 * 60 + 1 minuti. Sostituisci il valore fisso con il minutesBefore più grande di reminderKinds più un minuto, altrimenti la nuova finestra non viene mai raggiunta.
  4. Non serve una migration: reminder_deliveries.kind è testo e la chiave primaria (booking_id, kind, revision) rende già idempotente ogni nuovo tipo.
  5. Aggiungi test in test/notifications.test.ts per la nuova finestra:
    • diventa dovuto quando la prenotazione entra nella finestra;
    • una prenotazione creata dentro la finestra non lo riceve;
    • con il cron fermo viene inviato solo il promemoria più vicino;
    • una nuova revision lo rende di nuovo dovuto.

Completato quando

  • i comandi di verifica passano;
  • i nuovi test coprono i quattro casi indicati;
  • sendDueReminders non contiene finestre scritte a mano.