From d8d8cc20c99856c7a31533151803ecbc6aa04cbf Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sat, 15 Feb 2025 13:04:12 -0600 Subject: [PATCH] NOTIFY when replaceable events update --- src/db/migrations/051_notify_replaceable.ts | 45 +++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/db/migrations/051_notify_replaceable.ts diff --git a/src/db/migrations/051_notify_replaceable.ts b/src/db/migrations/051_notify_replaceable.ts new file mode 100644 index 00000000..e8233078 --- /dev/null +++ b/src/db/migrations/051_notify_replaceable.ts @@ -0,0 +1,45 @@ +import { Kysely, sql } from 'kysely'; + +export async function up(db: Kysely): Promise { + await sql` + CREATE OR REPLACE FUNCTION notify_nostr_event() + RETURNS TRIGGER AS $$ + BEGIN + IF OLD.id IS DISTINCT FROM NEW.id THEN + PERFORM pg_notify('nostr_event', NEW.id::text); + END IF; + + RETURN NEW; + END; + $$ LANGUAGE plpgsql; + `.execute(db); + + await sql`DROP TRIGGER IF EXISTS nostr_event_trigger ON nostr_events`.execute(db); + + await sql` + CREATE TRIGGER nostr_event_trigger + AFTER INSERT OR UPDATE ON nostr_events + FOR EACH ROW EXECUTE FUNCTION notify_nostr_event() + `.execute(db); +} + +export async function down(db: Kysely): Promise { + await sql` + CREATE OR REPLACE FUNCTION notify_nostr_event() + RETURNS TRIGGER AS $$ + BEGIN + PERFORM pg_notify('nostr_event', NEW.id::text); + + RETURN NEW; + END; + $$ LANGUAGE plpgsql; + `.execute(db); + + await sql`DROP TRIGGER IF EXISTS nostr_event_trigger ON nostr_events`.execute(db); + + await sql` + CREATE TRIGGER nostr_event_trigger + AFTER INSERT ON nostr_events + FOR EACH ROW EXECUTE FUNCTION notify_nostr_event() + `.execute(db); +}