38 lines
1.6 KiB
PL/PgSQL
38 lines
1.6 KiB
PL/PgSQL
-- M9 — Istante della prima risposta alla convocazione (serie "Conferme 24h")
|
|||
|
|
--
|
||
|
|
-- La serie "Conferme 24h" del modulo Serie di presenze richiede di sapere quanto tempo
|
||
|
|
-- passa fra la convocazione e la risposta del giocatore. Il primo dato c'è già
|
||
|
|
-- (`eventi_app.creato_il`), il secondo no: `risposte_presenze.aggiornato_il` registra
|
||
|
|
-- l'ULTIMA modifica, quindi un giocatore che risponde subito e poi cambia idea dopo una
|
||
|
|
-- settimana risulterebbe lento. Serve un istante separato, scritto una volta sola.
|
||
|
|
--
|
||
|
|
-- Non è un dato ricostruibile a posteriori: chi risponde prima che questa colonna esista
|
||
|
|
-- non lascia traccia. Le righe già presenti ereditano `aggiornato_il` come miglior
|
||
|
|
-- approssimazione disponibile.
|
||
|
|
|
||
|
|
ALTER TABLE public.risposte_presenze
|
||
|
|
ADD COLUMN risposto_il timestamptz NOT NULL DEFAULT now();
|
||
|
|
|
||
|
|
UPDATE public.risposte_presenze SET risposto_il = aggiornato_il;
|
||
|
|
|
||
|
|
COMMENT ON COLUMN public.risposte_presenze.risposto_il IS
|
||
|
|
'Istante della PRIMA risposta del giocatore per questo evento: non cambia se poi cambia stato. Si confronta con eventi_app.creato_il per la serie "Conferme 24h".';
|
||
|
|
|
||
|
|
-- Il client fa upsert senza questa colonna, quindi un aggiornamento non la tocca. Il
|
||
|
|
-- trigger difende comunque il valore originale da qualsiasi altra scrittura.
|
||
|
|
CREATE OR REPLACE FUNCTION public.blocca_risposto_il()
|
||
|
|
RETURNS trigger
|
||
|
|
LANGUAGE plpgsql
|
||
|
|
SECURITY DEFINER
|
||
|
|
SET search_path = public
|
||
|
|
AS $$
|
||
|
|
BEGIN
|
||
|
|
NEW.risposto_il := OLD.risposto_il;
|
||
|
|
RETURN NEW;
|
||
|
|
END;
|
||
|
|
$$;
|
||
|
|
|
||
|
|
CREATE TRIGGER risposte_presenze_risposto_il_immutabile
|
||
|
|
BEFORE UPDATE ON public.risposte_presenze
|
||
|
|
FOR EACH ROW EXECUTE FUNCTION public.blocca_risposto_il();
|