fix: create separate triggers for insert/update

This commit is contained in:
Scott Wilson
2024-10-05 11:01:30 -07:00
parent 1cc22a6195
commit 128b1cf856
@@ -7,29 +7,49 @@ import { TableName } from "@app/db/schemas";
// this is a postgres function to keep name in-sync with slug during transition period // this is a postgres function to keep name in-sync with slug during transition period
export const createKmsKeyNameSyncTrigger = async (knex: Knex) => { export const createKmsKeyNameSyncTrigger = async (knex: Knex) => {
// create function // function to update name if slug is updated
await knex.raw(` await knex.raw(`
CREATE OR REPLACE FUNCTION on_sync_kms_key_name() RETURNS TRIGGER AS $$ BEGIN NEW."name" = NEW."slug"; CREATE OR REPLACE FUNCTION on_update_kms_key_slug() RETURNS TRIGGER AS $$ BEGIN NEW."name" = NEW."slug";
RETURN NEW; RETURN NEW;
END; END;
$$ LANGUAGE plpgsql; $$ LANGUAGE plpgsql;
`); `);
// create trigger // function to set name if kms key created with slug
await knex.raw(` await knex.raw(`
CREATE TRIGGER "${TableName.KmsKey}_name_sync" CREATE OR REPLACE FUNCTION on_insert_kms_key() RETURNS TRIGGER AS $$ BEGIN NEW."name" = coalesce(NEW."name", NEW."slug");
BEFORE INSERT OR UPDATE OF "slug" ON ${TableName.KmsKey} RETURN NEW;
END;
$$ LANGUAGE plpgsql;
`);
// create trigger to update name if slug is updated
await knex.raw(`
CREATE TRIGGER "${TableName.KmsKey}_update_name"
BEFORE UPDATE OF "slug" ON ${TableName.KmsKey}
FOR EACH ROW FOR EACH ROW
EXECUTE PROCEDURE on_sync_kms_key_name(); EXECUTE PROCEDURE on_update_kms_key_slug();
`);
// create trigger to set name if key created with slug
await knex.raw(`
CREATE TRIGGER "${TableName.KmsKey}_set_name"
BEFORE INSERT ON ${TableName.KmsKey}
FOR EACH ROW
EXECUTE PROCEDURE on_insert_kms_key();
`); `);
}; };
export const dropKmsKeyNameSyncTrigger = async (knex: Knex) => { export const dropKmsKeyNameSyncTrigger = async (knex: Knex) => {
// drop trigger // drop triggers
await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_name_sync" ON ${TableName.KmsKey}`); await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_update_name" ON ${TableName.KmsKey}`);
await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_set_name" ON ${TableName.KmsKey}`);
// drop function // drop functions
await knex.raw(` await knex.raw(`
DROP FUNCTION IF EXISTS on_sync_kms_key_name() CASCADE; DROP FUNCTION IF EXISTS on_update_kms_key_slug() CASCADE;
`);
await knex.raw(`
DROP FUNCTION IF EXISTS on_insert_kms_key() CASCADE;
`); `);
}; };