mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-19 16:01:44 +00:00
96 lines
4.0 KiB
TypeScript
96 lines
4.0 KiB
TypeScript
import { Knex } from "knex";
|
|
|
|
import { selectAllTableCols } from "@app/lib/knex";
|
|
|
|
import { TableName } from "../schemas";
|
|
import { createOnUpdateTrigger, dropOnUpdateTrigger } from "../utils";
|
|
|
|
export async function up(knex: Knex): Promise<void> {
|
|
if (!(await knex.schema.hasTable(TableName.AccessApprovalPolicyEnvironment))) {
|
|
await knex.schema.createTable(TableName.AccessApprovalPolicyEnvironment, (t) => {
|
|
t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid());
|
|
t.uuid("policyId").notNullable();
|
|
t.foreign("policyId").references("id").inTable(TableName.AccessApprovalPolicy).onDelete("CASCADE");
|
|
t.uuid("envId").notNullable();
|
|
t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("CASCADE");
|
|
t.timestamps(true, true, true);
|
|
t.unique(["policyId", "envId"]);
|
|
});
|
|
}
|
|
if (!(await knex.schema.hasTable(TableName.SecretApprovalPolicyEnvironment))) {
|
|
await knex.schema.createTable(TableName.SecretApprovalPolicyEnvironment, (t) => {
|
|
t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid());
|
|
t.uuid("policyId").notNullable();
|
|
t.foreign("policyId").references("id").inTable(TableName.SecretApprovalPolicy).onDelete("CASCADE");
|
|
t.uuid("envId").notNullable();
|
|
t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("CASCADE");
|
|
t.timestamps(true, true, true);
|
|
t.unique(["policyId", "envId"]);
|
|
});
|
|
}
|
|
|
|
await knex.schema.alterTable(TableName.AccessApprovalPolicy, (t) => {
|
|
t.dropForeign(["envId"]);
|
|
|
|
// Add the new foreign key constraint with ON DELETE SET NULL
|
|
t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("SET NULL");
|
|
});
|
|
|
|
await knex.schema.alterTable(TableName.SecretApprovalPolicy, (t) => {
|
|
t.dropForeign(["envId"]);
|
|
|
|
// Add the new foreign key constraint with ON DELETE SET NULL
|
|
t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("SET NULL");
|
|
});
|
|
|
|
await createOnUpdateTrigger(knex, TableName.AccessApprovalPolicyEnvironment);
|
|
await createOnUpdateTrigger(knex, TableName.SecretApprovalPolicyEnvironment);
|
|
|
|
const existingAccessApprovalPolicies = await knex(TableName.AccessApprovalPolicy)
|
|
.select(selectAllTableCols(TableName.AccessApprovalPolicy))
|
|
.whereNotNull(`${TableName.AccessApprovalPolicy}.envId`);
|
|
|
|
const accessApprovalPolicies = existingAccessApprovalPolicies.map(async (policy) => {
|
|
await knex(TableName.AccessApprovalPolicyEnvironment).insert({
|
|
policyId: policy.id,
|
|
envId: policy.envId
|
|
});
|
|
});
|
|
|
|
await Promise.all(accessApprovalPolicies);
|
|
|
|
const existingSecretApprovalPolicies = await knex(TableName.SecretApprovalPolicy)
|
|
.select(selectAllTableCols(TableName.SecretApprovalPolicy))
|
|
.whereNotNull(`${TableName.SecretApprovalPolicy}.envId`);
|
|
|
|
const secretApprovalPolicies = existingSecretApprovalPolicies.map(async (policy) => {
|
|
await knex(TableName.SecretApprovalPolicyEnvironment).insert({
|
|
policyId: policy.id,
|
|
envId: policy.envId
|
|
});
|
|
});
|
|
|
|
await Promise.all(secretApprovalPolicies);
|
|
}
|
|
|
|
export async function down(knex: Knex): Promise<void> {
|
|
if (await knex.schema.hasTable(TableName.AccessApprovalPolicyEnvironment)) {
|
|
await knex.schema.dropTableIfExists(TableName.AccessApprovalPolicyEnvironment);
|
|
await dropOnUpdateTrigger(knex, TableName.AccessApprovalPolicyEnvironment);
|
|
}
|
|
if (await knex.schema.hasTable(TableName.SecretApprovalPolicyEnvironment)) {
|
|
await knex.schema.dropTableIfExists(TableName.SecretApprovalPolicyEnvironment);
|
|
await dropOnUpdateTrigger(knex, TableName.SecretApprovalPolicyEnvironment);
|
|
}
|
|
|
|
await knex.schema.alterTable(TableName.AccessApprovalPolicy, (t) => {
|
|
t.dropForeign(["envId"]);
|
|
t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("CASCADE");
|
|
});
|
|
|
|
await knex.schema.alterTable(TableName.SecretApprovalPolicy, (t) => {
|
|
t.dropForeign(["envId"]);
|
|
t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("CASCADE");
|
|
});
|
|
}
|