From b191a3c2f4a56093efad62801c666dbba607515c Mon Sep 17 00:00:00 2001 From: Meet Date: Sat, 28 Sep 2024 02:35:10 +0530 Subject: [PATCH] fix: check if column exists in migration --- .../20240918005344_add-group-approvals.ts | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/backend/src/db/migrations/20240918005344_add-group-approvals.ts b/backend/src/db/migrations/20240918005344_add-group-approvals.ts index ed4534eb5..7c26df838 100644 --- a/backend/src/db/migrations/20240918005344_add-group-approvals.ts +++ b/backend/src/db/migrations/20240918005344_add-group-approvals.ts @@ -3,34 +3,62 @@ import { Knex } from "knex"; import { TableName } from "../schemas"; export async function up(knex: Knex): Promise { + const hasAccessApproverGroupId = await knex.schema.hasColumn(TableName.AccessApprovalPolicyApprover, "approverGroupId"); + const hasAccessApproverUserId = await knex.schema.hasColumn(TableName.AccessApprovalPolicyApprover, "approverUserId"); + const hasSecretApproverGroupId = await knex.schema.hasColumn(TableName.SecretApprovalPolicyApprover, "approverGroupId"); + const hasSecretApproverUserId = await knex.schema.hasColumn(TableName.SecretApprovalPolicyApprover, "approverUserId"); if (await knex.schema.hasTable(TableName.AccessApprovalPolicyApprover)) { - // add column approverGroupId to AccessApprovalPolicyApprover await knex.schema.alterTable(TableName.AccessApprovalPolicyApprover, (table) => { - // make nullable - table.uuid("approverGroupId").nullable().references("id").inTable(TableName.Groups).onDelete("CASCADE"); + // add column approverGroupId to AccessApprovalPolicyApprover + if(!hasAccessApproverGroupId) { + table.uuid("approverGroupId").nullable().references("id").inTable(TableName.Groups).onDelete("CASCADE"); + } + // make approverUserId nullable - table.uuid("approverUserId").nullable().alter(); + if(hasAccessApproverUserId){ + table.uuid("approverUserId").nullable().alter(); + } }); - // add column approverGroupId to SecretApprovalPolicyApprover await knex.schema.alterTable(TableName.SecretApprovalPolicyApprover, (table) => { - table.uuid("approverGroupId").references("id").inTable(TableName.Groups).onDelete("CASCADE"); - table.uuid("approverUserId").nullable().alter(); + // add column approverGroupId to SecretApprovalPolicyApprover + if(!hasSecretApproverGroupId) { + table.uuid("approverGroupId").nullable().references("id").inTable(TableName.Groups).onDelete("CASCADE"); + } + + // make approverUserId nullable + if(hasSecretApproverUserId){ + table.uuid("approverUserId").nullable().alter(); + } }); } } export async function down(knex: Knex): Promise { + const hasAccessApproverGroupId = await knex.schema.hasColumn(TableName.AccessApprovalPolicyApprover, "approverGroupId"); + const hasAccessApproverUserId = await knex.schema.hasColumn(TableName.AccessApprovalPolicyApprover, "approverUserId"); + const hasSecretApproverGroupId = await knex.schema.hasColumn(TableName.SecretApprovalPolicyApprover, "approverGroupId"); + const hasSecretApproverUserId = await knex.schema.hasColumn(TableName.SecretApprovalPolicyApprover, "approverUserId"); + if (await knex.schema.hasTable(TableName.AccessApprovalPolicyApprover)) { - // remove await knex.schema.alterTable(TableName.AccessApprovalPolicyApprover, (table) => { - table.dropColumn("approverGroupId"); - table.uuid("approverUserId").notNullable().alter(); + if(hasAccessApproverGroupId){ + table.dropColumn("approverGroupId"); + } + // make approverUserId not nullable + if(hasAccessApproverUserId){ + table.uuid("approverUserId").notNullable().alter(); + } }); // remove await knex.schema.alterTable(TableName.SecretApprovalPolicyApprover, (table) => { - table.dropColumn("approverGroupId"); - table.uuid("approverUserId").notNullable().alter(); + if(hasSecretApproverGroupId){ + table.dropColumn("approverGroupId"); + } + // make approverUserId not nullable + if(hasSecretApproverUserId){ + table.uuid("approverUserId").notNullable().alter(); + } }); } }