Compare commits
1 commit
main
...
feat/story
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
befb4ec943 |
1 changed files with 53 additions and 0 deletions
|
|
@ -0,0 +1,53 @@
|
|||
-- Add notify_pbi_change() function and pbis_notify_change trigger so that
|
||||
-- INSERT/UPDATE/DELETE on pbis emits a pg_notify on 'scrum4me_changes'.
|
||||
-- Payload field names match BacklogPbi directly (no client-side rename needed).
|
||||
|
||||
CREATE OR REPLACE FUNCTION notify_pbi_change() RETURNS trigger AS $$
|
||||
DECLARE
|
||||
rec record;
|
||||
payload jsonb;
|
||||
BEGIN
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
rec := OLD;
|
||||
ELSE
|
||||
rec := NEW;
|
||||
END IF;
|
||||
|
||||
payload := jsonb_build_object(
|
||||
'op', CASE TG_OP
|
||||
WHEN 'INSERT' THEN 'I'
|
||||
WHEN 'UPDATE' THEN 'U'
|
||||
WHEN 'DELETE' THEN 'D'
|
||||
END,
|
||||
'entity', 'pbi',
|
||||
'id', rec.id,
|
||||
'product_id', rec.product_id,
|
||||
'title', rec.title,
|
||||
'code', rec.code,
|
||||
'priority', rec.priority,
|
||||
'status', rec.status,
|
||||
'sort_order', rec.sort_order,
|
||||
'created_at', rec.created_at
|
||||
);
|
||||
|
||||
IF TG_OP = 'UPDATE' THEN
|
||||
payload := payload || jsonb_build_object(
|
||||
'changed_fields',
|
||||
COALESCE((
|
||||
SELECT jsonb_agg(n.key)
|
||||
FROM jsonb_each(to_jsonb(NEW)) n
|
||||
JOIN jsonb_each(to_jsonb(OLD)) o USING (key)
|
||||
WHERE n.value IS DISTINCT FROM o.value
|
||||
), '[]'::jsonb)
|
||||
);
|
||||
END IF;
|
||||
|
||||
PERFORM pg_notify('scrum4me_changes', payload::text);
|
||||
RETURN rec;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
DROP TRIGGER IF EXISTS pbis_notify_change ON pbis;
|
||||
CREATE TRIGGER pbis_notify_change
|
||||
AFTER INSERT OR UPDATE OR DELETE ON pbis
|
||||
FOR EACH ROW EXECUTE FUNCTION notify_pbi_change();
|
||||
Loading…
Add table
Add a link
Reference in a new issue