From a5f62a0323e40f34b2e0c1087c806060a758a93f Mon Sep 17 00:00:00 2001 From: Madhura68 Date: Wed, 6 May 2026 00:16:52 +0200 Subject: [PATCH] feat(T-559): pg_notify-trigger op story_logs voor sync-tab realtime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AFTER INSERT op story_logs emit op scrum4me_changes channel met entity:'story_log'. Trigger resolved product_id en idea_id via story → pbi → product/idea zodat SSE-route kan filteren zonder extra DB-call per event. Migratie toegepast op Neon productie-DB. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../migration.sql | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 prisma/migrations/20260506001700_story_logs_notify/migration.sql diff --git a/prisma/migrations/20260506001700_story_logs_notify/migration.sql b/prisma/migrations/20260506001700_story_logs_notify/migration.sql new file mode 100644 index 0000000..6d246b5 --- /dev/null +++ b/prisma/migrations/20260506001700_story_logs_notify/migration.sql @@ -0,0 +1,44 @@ +-- pg_notify trigger op story_logs: emit AFTER INSERT op het gedeelde +-- 'scrum4me_changes'-channel zodat de Sync-tab op /ideas/[id] real-time +-- nieuwe IMPLEMENTATION_PLAN/COMMIT/TEST_RESULT-entries kan tonen zonder +-- handmatige refresh. +-- +-- Payload-format consistent met andere triggers in deze codebase: +-- {op:'INSERT', entity:'story_log', id, story_id, product_id, idea_id?} +-- +-- product_id en idea_id worden afgeleid via story → pbi → product en +-- story → pbi → idea (1:1 via Idea.pbi_id). Hierdoor kan de SSE-route +-- filteren op productAccessFilter én op user-eigen ideeën zonder extra +-- DB-call per event. + +CREATE OR REPLACE FUNCTION notify_story_log_change() RETURNS TRIGGER AS $$ +DECLARE + v_product_id text; + v_idea_id text; + payload json; +BEGIN + SELECT p.product_id, i.id + INTO v_product_id, v_idea_id + FROM stories s + JOIN pbis p ON p.id = s.pbi_id + LEFT JOIN ideas i ON i.pbi_id = p.id + WHERE s.id = NEW.story_id; + + payload := json_build_object( + 'op', TG_OP, + 'entity', 'story_log', + 'id', NEW.id, + 'story_id', NEW.story_id, + 'product_id', v_product_id, + 'idea_id', v_idea_id, + 'log_type', NEW.type + ); + + PERFORM pg_notify('scrum4me_changes', payload::text); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER story_logs_notify + AFTER INSERT ON story_logs + FOR EACH ROW EXECUTE FUNCTION notify_story_log_change();