L'allenatore non riceve i promemoria degli eventi; test dei destinatari per ruolo (DD-039)

m25: giocatori_destinatari_evento() include solo i giocatori attivi, quindi
l'allenatore non riceve più i promemoria a 24 e 3 ore, per nessun tipo di
evento (fino alla m24 li riceveva sempre, DD-034). Riceve ancora i messaggi
dello staff.

Test: nuovo destinatari-notifiche.test.ts (14 controlli sulle route vere con un
servizio push finto: promemoria, messaggio dello staff, sondaggio, sollecito,
turno palloni, permessi di allenatore e giocatore) e aggiornato
permessi-allenatore. Documentazione: DD-039, tabella delle notifiche
dell'allenatore, catalogo e tabella dei test che lo verificano.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-09-29 14:48:30 +02:00
1 parent e9013b703b
commit 4760e8650c
11 files changed
+665 -69

No files matched your search

@@ -0,0 +1,25 @@
-- M25 — L'allenatore non riceve i promemoria degli eventi (DD-039)
--
-- La migration M21 (DD-034) aggiunse `g.tipo = 'allenatore'` ai destinatari dei promemoria a 24 e
-- 3 ore: l'allenatore attivo li riceveva sempre, convocato o no. Ma un promemoria chiede di
-- esserci, e l'allenatore non può rispondere alle presenze, non è convocabile e non compare tra i
-- partecipanti: per un evento come la cena di squadra riceveva un avviso su cui non poteva fare
-- nulla. Da ora i destinatari sono solo i giocatori attivi: i convocati, o tutta la rosa se
-- `convocati` è vuoto.
--
-- Cambia solo questa funzione: `genera_promemoria_eventi()` (M17, M23), i job pg_cron, le code
-- email e push e il resto delle notifiche restano invariati. I promemoria già generati per un
-- allenatore prima della migration non vengono toccati. I messaggi dello staff continuano ad
-- arrivargli: non dipendono da questa funzione.
CREATE OR REPLACE FUNCTION public.giocatori_destinatari_evento(p_evento_id text)
RETURNS SETOF text
LANGUAGE sql STABLE AS $$
SELECT g.id
FROM public.eventi_app e
JOIN public.giocatori_squadra g
ON g.attivo = true
AND g.tipo = 'giocatore'
AND (cardinality(e.convocati) = 0 OR g.id = ANY(e.convocati))
WHERE e.id = p_evento_id;
$$;