diff --git a/backend/src/db/migrations/utils/kmsKeySlugNameTransition.ts b/backend/src/db/migrations/utils/kmsKeySlugNameTransition.ts index f7d295619..76cc9ea5f 100644 --- a/backend/src/db/migrations/utils/kmsKeySlugNameTransition.ts +++ b/backend/src/db/migrations/utils/kmsKeySlugNameTransition.ts @@ -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 export const createKmsKeyNameSyncTrigger = async (knex: Knex) => { - // create function + // function to update name if slug is updated 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; END; $$ LANGUAGE plpgsql; `); - // create trigger + // function to set name if kms key created with slug await knex.raw(` - CREATE TRIGGER "${TableName.KmsKey}_name_sync" - BEFORE INSERT OR UPDATE OF "slug" ON ${TableName.KmsKey} + CREATE OR REPLACE FUNCTION on_insert_kms_key() RETURNS TRIGGER AS $$ BEGIN NEW."name" = coalesce(NEW."name", NEW."slug"); + 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 - 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) => { - // drop trigger - await knex.raw(`DROP TRIGGER IF EXISTS "${TableName.KmsKey}_name_sync" ON ${TableName.KmsKey}`); + // drop triggers + 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(` - 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; `); };