Promemoria senza ritorni e tre canali per ogni notifica (DD-037, DD-038)
m23: un registro (promemoria_eventi_generati) ricorda i promemoria a 24 e 3 ore già generati, così eliminare la notifica non li fa rigenerare dal cron né riaccodare la mail a ogni giro. m24: la push dei promemoria, che nascono nel database, la manda il worker mailer/ con lo stesso modulo dell'app (coda notifiche_push_coda, esiti, backoff, iscrizioni scadute eliminate, push scartate oltre 3 ore). Il sondaggio pre-partita scrive anche notifiche_utente (tipo sondaggio_cacche): compare in-app e arriva per email. L'immagine del worker si costruisce dalla radice del repository per includere src/lib/webpush.server.ts. Test: 9 di integrazione per m23, 17 per la coda push, 6 per la route del sondaggio, nuovi casi unitari sul worker; prova end-to-end con un servizio push finto. Documentazione e catalogo delle notifiche aggiornati. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
58eba642f7
commit
e9013b703b
27 files changed
+2076
-92
No files matched your search
@@ -1,6 +1,8 @@
|
||||
/** Check del sondaggio cacche: `bun test/unit/cacche.test.ts`. */
|
||||
import assert from "node:assert/strict";
|
||||
import {
|
||||
avvisoSondaggio,
|
||||
destinatariSondaggio,
|
||||
mediaPartita,
|
||||
mediaStagione,
|
||||
recordStagione,
|
||||
@@ -118,4 +120,24 @@ assert.equal(
|
||||
"partita passata: terminato",
|
||||
);
|
||||
|
||||
// --- Avviso del sondaggio (DD-038) ---------------------------------------------
|
||||
assert.deepEqual(avvisoSondaggio({ titolo: "Juve - CRAP", ora: "21:00" }), {
|
||||
titolo: "💩 Sondaggio pre-partita aperto",
|
||||
testo: "Juve - CRAP · ore 21:00. Quante cacche hai fatto? Rispondi prima del fischio d'inizio.",
|
||||
});
|
||||
|
||||
// Destinatari in-app ed email: giocatori attivi, mai gli allenatori né chi non è più attivo,
|
||||
// a prescindere dai dispositivi iscritti alla push.
|
||||
assert.deepEqual(
|
||||
destinatariSondaggio([
|
||||
{ id: "g1", attivo: true, tipo: "giocatore" },
|
||||
{ id: "g2", attivo: false, tipo: "giocatore" },
|
||||
{ id: "g3", attivo: true, tipo: "allenatore" },
|
||||
{ id: "g4", attivo: true, tipo: "giocatore" },
|
||||
]),
|
||||
["g1", "g4"],
|
||||
"solo i giocatori attivi",
|
||||
);
|
||||
assert.deepEqual(destinatariSondaggio([]), [], "rosa vuota: nessun destinatario");
|
||||
|
||||
console.log("cacche: ok");
|
||||
Reference in new issue
Block a user