diff --git a/services/migrations/index.js b/services/migrations/index.js index 7078e93..47ec678 100644 --- a/services/migrations/index.js +++ b/services/migrations/index.js @@ -8,7 +8,7 @@ if (!process.env.DATABASE_PASSWORD) throw new Error('DATABASE_PASSWORD is missin async function main() { const dbConfig = { - database: "postgrest", + database: "futureporn", user: "postgres", password: process.env.DATABASE_PASSWORD, host: 'postgresql-primary.futureporn.svc.cluster.local', diff --git a/services/migrations/migrations/00003_add-records-triggers.sql b/services/migrations/migrations/00003_add-records-triggers.sql new file mode 100644 index 0000000..8973391 --- /dev/null +++ b/services/migrations/migrations/00003_add-records-triggers.sql @@ -0,0 +1,28 @@ + +-- one trigger function to rule them all @see https://worker.graphile.org/docs/sql-add-job#example-one-trigger-function-to-rule-them-all +CREATE FUNCTION trigger_job() RETURNS trigger AS $$ +BEGIN + PERFORM graphile_worker.add_job(TG_ARGV[0], json_build_object( + 'schema', TG_TABLE_SCHEMA, + 'table', TG_TABLE_NAME, + 'op', TG_OP, + 'id', (CASE WHEN TG_OP = 'DELETE' THEN OLD.id ELSE NEW.id END) + )); + RETURN NEW; +END; +$$ LANGUAGE plpgsql VOLATILE; + + +-- When a record is created, add a graphile_worker job to start recording +CREATE TRIGGER record + AFTER INSERT ON api.records + FOR EACH ROW + EXECUTE PROCEDURE trigger_job('record'); + +-- When a record is updated, add a graphile_worker job to update the discord message +CREATE TRIGGER update_discord_message + AFTER UPDATE ON api.records + FOR EACH ROW + EXECUTE PROCEDURE trigger_job('update_discord_message'); + +-- for more reference, @see https://worker.graphile.org/docs/sql-add-job#example-one-trigger-function-to-rule-them-all \ No newline at end of file diff --git a/services/migrations/package.json b/services/migrations/package.json index 214a680..c3024fc 100644 --- a/services/migrations/package.json +++ b/services/migrations/package.json @@ -1,7 +1,7 @@ { "name": "@futureporn/migrations", "type": "module", - "version": "0.5.0", + "version": "0.6.0", "description": "", "main": "index.js", "scripts": {