59 lines
1.7 KiB
PL/PgSQL
59 lines
1.7 KiB
PL/PgSQL
-- prisma/migrations/20250609211800_notify_others_sse/migration.sql
|
||
/* 0️⃣ Limpieza */
|
||
DROP FUNCTION IF EXISTS notify_planilla_change() CASCADE;
|
||
DROP FUNCTION IF EXISTS notify_generic_change() CASCADE;
|
||
|
||
/* 1️⃣ Función genérica */
|
||
CREATE OR REPLACE FUNCTION notify_sse_change()
|
||
RETURNS trigger AS $$
|
||
DECLARE
|
||
payload TEXT;
|
||
BEGIN
|
||
payload := json_build_object(
|
||
'table', TG_TABLE_NAME,
|
||
'operation', TG_OP,
|
||
'old', row_to_json(OLD),
|
||
'new', row_to_json(NEW)
|
||
)::text;
|
||
|
||
PERFORM pg_notify('sse_events', payload);
|
||
|
||
IF TG_OP = 'DELETE' THEN
|
||
RETURN OLD;
|
||
ELSE
|
||
RETURN NEW;
|
||
END IF;
|
||
END;
|
||
$$ LANGUAGE plpgsql;
|
||
|
||
/* 2️⃣ Drop de triggers viejos (normal o constraint) */
|
||
DROP TRIGGER IF EXISTS planilla_notify_trigger ON "Planilla";
|
||
DROP TRIGGER IF EXISTS cliente_notify_trigger ON "Cliente";
|
||
DROP TRIGGER IF EXISTS tarea_notify_trigger ON "TareaRealizada";
|
||
DROP TRIGGER IF EXISTS asistencia_notify_trigger ON "Asistencia";
|
||
|
||
/* 3️⃣ Constraint triggers DEFERRABLE */
|
||
CREATE CONSTRAINT TRIGGER planilla_notify_trigger
|
||
AFTER INSERT OR UPDATE OR DELETE ON "Planilla"
|
||
DEFERRABLE INITIALLY DEFERRED
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE notify_sse_change();
|
||
|
||
CREATE CONSTRAINT TRIGGER cliente_notify_trigger
|
||
AFTER INSERT OR UPDATE OR DELETE ON "Cliente"
|
||
DEFERRABLE INITIALLY DEFERRED
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE notify_sse_change();
|
||
|
||
CREATE CONSTRAINT TRIGGER tarea_notify_trigger
|
||
AFTER INSERT OR UPDATE OR DELETE ON "TareaRealizada"
|
||
DEFERRABLE INITIALLY DEFERRED
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE notify_sse_change();
|
||
|
||
CREATE CONSTRAINT TRIGGER asistencia_notify_trigger
|
||
AFTER INSERT OR UPDATE OR DELETE ON "Asistencia"
|
||
DEFERRABLE INITIALLY DEFERRED
|
||
FOR EACH ROW
|
||
EXECUTE PROCEDURE notify_sse_change();
|