agregada funcionalidad realtime postgress, api y ui.

This commit is contained in:
2025-06-09 16:35:36 -06:00
parent bec28b74ab
commit 513c305971
9 changed files with 117 additions and 77 deletions

View File

@@ -1,26 +0,0 @@
-- Create function and trigger to notify SSE on planilla changes
CREATE OR REPLACE FUNCTION notify_planilla_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;
DROP TRIGGER IF EXISTS planilla_notify_trigger ON "Planilla";
CREATE TRIGGER planilla_notify_trigger
AFTER INSERT OR UPDATE OR DELETE ON "Planilla"
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE notify_planilla_change();

View File

@@ -1,6 +1,10 @@
-- Triggers for other tables to notify SSE channel
-- 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;
CREATE OR REPLACE FUNCTION notify_generic_change()
/* 1⃣ Función genérica */
CREATE OR REPLACE FUNCTION notify_sse_change()
RETURNS trigger AS $$
DECLARE
payload TEXT;
@@ -11,7 +15,9 @@ BEGIN
'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
@@ -20,23 +26,33 @@ BEGIN
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS cliente_notify_trigger ON "Cliente";
CREATE TRIGGER cliente_notify_trigger
AFTER INSERT OR UPDATE OR DELETE ON "Cliente"
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE notify_generic_change();
DROP TRIGGER IF EXISTS tarea_notify_trigger ON "TareaRealizada";
CREATE TRIGGER tarea_notify_trigger
AFTER INSERT OR UPDATE OR DELETE ON "TareaRealizada"
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE notify_generic_change();
/* 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";
CREATE TRIGGER asistencia_notify_trigger
AFTER INSERT OR UPDATE OR DELETE ON "Asistencia"
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW
EXECUTE PROCEDURE notify_generic_change();
/* 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();