Numero e data della tessera arrivano dal comitato dopo l'iscrizione, quindi li scrive solo un admin (come numero/ruolo): estende il trigger di M1/M5, aggiunge il pannello dedicato in /admin con badge e conteggio in dashboard. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
53 lines
2.2 KiB
PL/PgSQL
53 lines
2.2 KiB
PL/PgSQL
-- M8 — Tracciamento tesseramento CSI (roadmap v1.1)
|
|
--
|
|
-- Fin qui il modulo Profilo Giocatore raccoglie solo i dati per compilare la domanda di
|
|
-- tesseramento (profili_giocatore) e li esporta in CSV; manca lo stato di chi è già
|
|
-- tesserato. Numero e data della tessera non sono un dato che il giocatore conosce in
|
|
-- anticipo o può autodichiarare: arrivano dal CSI dopo l'iscrizione effettiva, quindi vanno
|
|
-- in giocatori_squadra insieme agli altri campi che gestisce solo l'admin (numero, ruolo),
|
|
-- non in profili_giocatore che il giocatore scrive di sé stesso.
|
|
|
|
ALTER TABLE public.giocatori_squadra
|
|
ADD COLUMN numero_tessera text,
|
|
ADD COLUMN data_tessera date;
|
|
|
|
COMMENT ON COLUMN public.giocatori_squadra.numero_tessera IS
|
|
'Numero della tessera CSI assegnata dal comitato, valorizzato solo a tesseramento avvenuto.';
|
|
COMMENT ON COLUMN public.giocatori_squadra.data_tessera IS
|
|
'Data di rilascio della tessera CSI.';
|
|
|
|
-- Estende il trigger di DD-016/DD-018 (m5_email_giocatori_squadra): i due nuovi campi
|
|
-- restano scrivibili solo dall'admin, come numero/ruolo/attivo — un giocatore che reclama
|
|
-- il proprio slot non può includerli nello stesso UPDATE.
|
|
CREATE OR REPLACE FUNCTION public.enforce_giocatori_squadra_update()
|
|
RETURNS TRIGGER
|
|
LANGUAGE plpgsql
|
|
SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
BEGIN
|
|
IF public.has_role(auth.uid(), 'admin'::public.app_role) THEN
|
|
RETURN NEW;
|
|
END IF;
|
|
|
|
IF OLD.auth_user_id IS NULL
|
|
AND NEW.auth_user_id = auth.uid()
|
|
AND OLD.email IS NOT NULL
|
|
AND lower(OLD.email) = lower(coalesce(auth.jwt() ->> 'email', ''))
|
|
AND NEW.id IS NOT DISTINCT FROM OLD.id
|
|
AND NEW.nome IS NOT DISTINCT FROM OLD.nome
|
|
AND NEW.cognome IS NOT DISTINCT FROM OLD.cognome
|
|
AND NEW.numero IS NOT DISTINCT FROM OLD.numero
|
|
AND NEW.ruolo IS NOT DISTINCT FROM OLD.ruolo
|
|
AND NEW.attivo IS NOT DISTINCT FROM OLD.attivo
|
|
AND NEW.email IS NOT DISTINCT FROM OLD.email
|
|
AND NEW.numero_tessera IS NOT DISTINCT FROM OLD.numero_tessera
|
|
AND NEW.data_tessera IS NOT DISTINCT FROM OLD.data_tessera
|
|
AND NEW.creato_il IS NOT DISTINCT FROM OLD.creato_il THEN
|
|
RETURN NEW;
|
|
END IF;
|
|
|
|
RAISE EXCEPTION 'Aggiornamento non autorizzato su giocatori_squadra';
|
|
END;
|
|
$$;
|