feat: made migration script idempotent

This commit is contained in:
=
2024-05-31 23:10:02 +05:30
parent b0c472b5e1
commit 5560c18a09
@@ -3,71 +3,112 @@ import { Knex } from "knex";
import { TableName } from "../schemas"; import { TableName } from "../schemas";
export async function up(knex: Knex): Promise<void> { export async function up(knex: Knex): Promise<void> {
const doesSecretImportIsReplicationExist = await knex.schema.hasColumn(TableName.SecretImport, "isReplication");
const doesSecretImportIsReplicationSuccessExist = await knex.schema.hasColumn(
TableName.SecretImport,
"isReplicationSuccess"
);
const doesSecretImportReplicationStatusExist = await knex.schema.hasColumn(
TableName.SecretImport,
"replicationStatus"
);
const doesSecretImportLastReplicatedExist = await knex.schema.hasColumn(TableName.SecretImport, "lastReplicated");
if (await knex.schema.hasTable(TableName.SecretImport)) { if (await knex.schema.hasTable(TableName.SecretImport)) {
await knex.schema.alterTable(TableName.SecretImport, (t) => { await knex.schema.alterTable(TableName.SecretImport, (t) => {
t.boolean("isReplication").defaultTo(false); if (!doesSecretImportIsReplicationExist) t.boolean("isReplication").defaultTo(false);
t.boolean("isReplicationSuccess").nullable(); if (!doesSecretImportIsReplicationSuccessExist) t.boolean("isReplicationSuccess").nullable();
t.text("replicationStatus").nullable(); if (!doesSecretImportReplicationStatusExist) t.text("replicationStatus").nullable();
t.datetime("lastReplicated").nullable(); if (!doesSecretImportLastReplicatedExist) t.datetime("lastReplicated").nullable();
}); });
} }
const doesSecretIsReplicatedExist = await knex.schema.hasColumn(TableName.Secret, "isReplicated");
if (await knex.schema.hasTable(TableName.Secret)) { if (await knex.schema.hasTable(TableName.Secret)) {
await knex.schema.alterTable(TableName.Secret, (t) => { await knex.schema.alterTable(TableName.Secret, (t) => {
t.boolean("isReplicated"); if (!doesSecretIsReplicatedExist) t.boolean("isReplicated");
}); });
} }
const doesSecretVersionIsReplicatedExist = await knex.schema.hasColumn(TableName.SecretVersion, "isReplicated");
if (await knex.schema.hasTable(TableName.SecretVersion)) { if (await knex.schema.hasTable(TableName.SecretVersion)) {
await knex.schema.alterTable(TableName.SecretVersion, (t) => { await knex.schema.alterTable(TableName.SecretVersion, (t) => {
t.boolean("isReplicated"); if (!doesSecretVersionIsReplicatedExist) t.boolean("isReplicated");
}); });
} }
const doesSecretApprovalRequestSecretIsReplicatedExist = await knex.schema.hasColumn(
TableName.SecretApprovalRequestSecret,
"isReplicated"
);
if (await knex.schema.hasTable(TableName.SecretApprovalRequestSecret)) { if (await knex.schema.hasTable(TableName.SecretApprovalRequestSecret)) {
await knex.schema.alterTable(TableName.SecretApprovalRequestSecret, (t) => { await knex.schema.alterTable(TableName.SecretApprovalRequestSecret, (t) => {
t.boolean("isReplicated"); if (!doesSecretApprovalRequestSecretIsReplicatedExist) t.boolean("isReplicated");
}); });
} }
const doesSecretApprovalRequestIsReplicatedExist = await knex.schema.hasColumn(
TableName.SecretApprovalRequest,
"isReplicated"
);
if (await knex.schema.hasTable(TableName.SecretApprovalRequest)) { if (await knex.schema.hasTable(TableName.SecretApprovalRequest)) {
await knex.schema.alterTable(TableName.SecretApprovalRequest, (t) => { await knex.schema.alterTable(TableName.SecretApprovalRequest, (t) => {
t.boolean("isReplicated"); if (!doesSecretApprovalRequestIsReplicatedExist) t.boolean("isReplicated");
}); });
} }
} }
export async function down(knex: Knex): Promise<void> { export async function down(knex: Knex): Promise<void> {
const doesSecretImportIsReplicationExist = await knex.schema.hasColumn(TableName.SecretImport, "isReplication");
const doesSecretImportIsReplicationSuccessExist = await knex.schema.hasColumn(
TableName.SecretImport,
"isReplicationSuccess"
);
const doesSecretImportReplicationStatusExist = await knex.schema.hasColumn(
TableName.SecretImport,
"replicationStatus"
);
const doesSecretImportLastReplicatedExist = await knex.schema.hasColumn(TableName.SecretImport, "lastReplicated");
if (await knex.schema.hasTable(TableName.SecretImport)) { if (await knex.schema.hasTable(TableName.SecretImport)) {
await knex.schema.alterTable(TableName.SecretImport, (t) => { await knex.schema.alterTable(TableName.SecretImport, (t) => {
t.dropColumns("isReplication"); if (doesSecretImportIsReplicationExist) t.dropColumn("isReplication");
t.dropColumns("isReplicationSuccess"); if (doesSecretImportIsReplicationSuccessExist) t.dropColumn("isReplicationSuccess");
t.dropColumns("replicationStatus"); if (doesSecretImportReplicationStatusExist) t.dropColumn("replicationStatus");
t.dropColumns("lastReplicated"); if (doesSecretImportLastReplicatedExist) t.dropColumn("lastReplicated");
}); });
} }
const doesSecretIsReplicatedExist = await knex.schema.hasColumn(TableName.Secret, "isReplicated");
if (await knex.schema.hasTable(TableName.Secret)) { if (await knex.schema.hasTable(TableName.Secret)) {
await knex.schema.alterTable(TableName.Secret, (t) => { await knex.schema.alterTable(TableName.Secret, (t) => {
t.dropColumns("isReplicated"); if (doesSecretIsReplicatedExist) t.dropColumns("isReplicated");
}); });
} }
const doesSecretVersionIsReplicatedExist = await knex.schema.hasColumn(TableName.SecretVersion, "isReplicated");
if (await knex.schema.hasTable(TableName.SecretVersion)) { if (await knex.schema.hasTable(TableName.SecretVersion)) {
await knex.schema.alterTable(TableName.SecretVersion, (t) => { await knex.schema.alterTable(TableName.SecretVersion, (t) => {
t.dropColumns("isReplicated"); if (doesSecretVersionIsReplicatedExist) t.dropColumns("isReplicated");
}); });
} }
const doesSecretApprovalRequestSecretIsReplicatedExist = await knex.schema.hasColumn(
TableName.SecretApprovalRequestSecret,
"isReplicated"
);
if (await knex.schema.hasTable(TableName.SecretApprovalRequestSecret)) { if (await knex.schema.hasTable(TableName.SecretApprovalRequestSecret)) {
await knex.schema.alterTable(TableName.SecretApprovalRequestSecret, (t) => { await knex.schema.alterTable(TableName.SecretApprovalRequestSecret, (t) => {
t.dropColumns("isReplicated"); if (doesSecretApprovalRequestSecretIsReplicatedExist) t.dropColumns("isReplicated");
}); });
} }
const doesSecretApprovalRequestIsReplicatedExist = await knex.schema.hasColumn(
TableName.SecretApprovalRequest,
"isReplicated"
);
if (await knex.schema.hasTable(TableName.SecretApprovalRequest)) { if (await knex.schema.hasTable(TableName.SecretApprovalRequest)) {
await knex.schema.alterTable(TableName.SecretApprovalRequest, (t) => { await knex.schema.alterTable(TableName.SecretApprovalRequest, (t) => {
t.dropColumn("isReplicated"); if (doesSecretApprovalRequestIsReplicatedExist) t.dropColumn("isReplicated");
}); });
} }
} }