diff --git a/pg-migrator/src/index.ts b/pg-migrator/src/index.ts index 574cf66e6..245414cbd 100644 --- a/pg-migrator/src/index.ts +++ b/pg-migrator/src/index.ts @@ -255,7 +255,7 @@ const main = async () => { client: "pg", connection: postgres_url, migrations: { - directory: path.join(__dirname, "./migrations"), + directory: path.join(__dirname, "../../backend-pg/src/db/migrations"), extension: "ts", tableName: "infisical_migrations", }, diff --git a/pg-migrator/src/migrations/20231204092737_organization.ts b/pg-migrator/src/migrations/20231204092737_organization.ts index 8888fd041..8928b086a 100644 --- a/pg-migrator/src/migrations/20231204092737_organization.ts +++ b/pg-migrator/src/migrations/20231204092737_organization.ts @@ -9,17 +9,15 @@ export async function up(knex: Knex): Promise { await knex.schema.createTable(TableName.Organization, (t) => { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.string("name").notNullable(); - t.string("slug").notNullable(); t.string("customerId"); + t.string("slug").notNullable(); // does not need update trigger we will do it manually + t.unique("slug"); t.timestamps(true, true, true); }); await knex.schema.alterTable(TableName.AuthTokens, (t) => { t.uuid("orgId"); - t.foreign("orgId") - .references("id") - .inTable(TableName.Organization) - .onDelete("CASCADE"); + t.foreign("orgId").references("id").inTable(TableName.Organization).onDelete("CASCADE"); }); } // this is a one time function diff --git a/pg-migrator/src/migrations/20231212110939_project.ts b/pg-migrator/src/migrations/20231212110939_project.ts index 37971f7d8..b2764dc1f 100644 --- a/pg-migrator/src/migrations/20231212110939_project.ts +++ b/pg-migrator/src/migrations/20231212110939_project.ts @@ -7,15 +7,13 @@ export async function up(knex: Knex): Promise { if (!(await knex.schema.hasTable(TableName.Project))) { await knex.schema.createTable(TableName.Project, (t) => { t.string("id", 36).primary().defaultTo(knex.fn.uuid()); - t.string("name", 60).notNullable(); + t.string("name").notNullable(); t.string("slug").notNullable(); t.boolean("autoCapitalization").defaultTo(true); t.uuid("orgId").notNullable(); - t.foreign("orgId") - .references("id") - .inTable(TableName.Organization) - .onDelete("CASCADE"); + t.foreign("orgId").references("id").inTable(TableName.Organization).onDelete("CASCADE"); t.timestamps(true, true, true); + t.unique(["orgId", "slug"]); }); } await createOnUpdateTrigger(knex, TableName.Project); @@ -27,14 +25,11 @@ export async function up(knex: Knex): Promise { t.string("slug").notNullable(); t.integer("position").notNullable(); t.string("projectId").notNullable(); - t.foreign("projectId") - .references("id") - .inTable(TableName.Project) - .onDelete("CASCADE"); + t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE"); // this will ensure ever env has its position t.unique(["projectId", "position"], { indexName: "env_pos_composite_uniqe", - deferrable: "deferred", + deferrable: "deferred" }); t.timestamps(true, true, true); }); @@ -46,21 +41,12 @@ export async function up(knex: Knex): Promise { t.text("encryptedKey").notNullable(); t.text("nonce").notNullable(); t.uuid("receiverId").notNullable(); - t.foreign("receiverId") - .references("id") - .inTable(TableName.Users) - .onDelete("CASCADE"); + t.foreign("receiverId").references("id").inTable(TableName.Users).onDelete("CASCADE"); t.uuid("senderId"); // if sender is deleted just don't do anything to this record - t.foreign("senderId") - .references("id") - .inTable(TableName.Users) - .onDelete("SET NULL"); + t.foreign("senderId").references("id").inTable(TableName.Users).onDelete("SET NULL"); t.string("projectId").notNullable(); - t.foreign("projectId") - .references("id") - .inTable(TableName.Project) - .onDelete("CASCADE"); + t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE"); t.timestamps(true, true, true); }); } diff --git a/pg-migrator/src/migrations/20231220052508_secret-version.ts b/pg-migrator/src/migrations/20231220052508_secret-version.ts index 4290f0ec3..6e3a8ae93 100644 --- a/pg-migrator/src/migrations/20231220052508_secret-version.ts +++ b/pg-migrator/src/migrations/20231220052508_secret-version.ts @@ -1,16 +1,7 @@ import { Knex } from "knex"; -import { - SecretEncryptionAlgo, - SecretKeyEncoding, - SecretType, - TableName, -} from "../schemas"; -import { - createJunctionTable, - createOnUpdateTrigger, - dropOnUpdateTrigger, -} from "../utils"; +import { SecretEncryptionAlgo, SecretKeyEncoding, SecretType, TableName } from "../schemas"; +import { createJunctionTable, createOnUpdateTrigger, dropOnUpdateTrigger } from "../utils"; export async function up(knex: Knex): Promise { if (!(await knex.schema.hasTable(TableName.SecretVersion))) { @@ -18,7 +9,7 @@ export async function up(knex: Knex): Promise { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.integer("version").defaultTo(1).notNullable(); t.string("type").notNullable().defaultTo(SecretType.Shared); - t.text("secretBlindIndex"); + t.text("secretBlindIndex").notNullable(); t.text("secretKeyCiphertext").notNullable(); t.text("secretKeyIV").notNullable(); t.text("secretKeyTag").notNullable(); @@ -31,25 +22,17 @@ export async function up(knex: Knex): Promise { t.string("secretReminderNote"); t.integer("secretReminderRepeatDays"); t.boolean("skipMultilineEncoding").defaultTo(false); - t.string("algorithm") - .notNullable() - .defaultTo(SecretEncryptionAlgo.AES_256_GCM); + t.string("algorithm").notNullable().defaultTo(SecretEncryptionAlgo.AES_256_GCM); t.string("keyEncoding").notNullable().defaultTo(SecretKeyEncoding.UTF8); t.jsonb("metadata"); // to avoid orphan rows t.uuid("envId"); - t.foreign("envId") - .references("id") - .inTable(TableName.Environment) - .onDelete("CASCADE"); + t.foreign("envId").references("id").inTable(TableName.Environment).onDelete("CASCADE"); t.uuid("secretId").notNullable(); t.uuid("folderId").notNullable(); // t.foreign("secretId").references("id").inTable(TableName.Secret).onDelete("SET NULL"); t.uuid("userId"); - t.foreign("userId") - .references("id") - .inTable(TableName.Users) - .onDelete("CASCADE"); + t.foreign("userId").references("id").inTable(TableName.Users).onDelete("CASCADE"); t.timestamps(true, true, true); }); } @@ -57,14 +40,14 @@ export async function up(knex: Knex): Promise { // many to many relation between tags await createJunctionTable( knex, - TableName.JnSecretVersionTag, + TableName.SecretVersionTag, TableName.SecretVersion, - TableName.SecretTag, + TableName.SecretTag ); } export async function down(knex: Knex): Promise { - await knex.schema.dropTableIfExists(TableName.JnSecretVersionTag); + await knex.schema.dropTableIfExists(TableName.SecretVersionTag); await knex.schema.dropTableIfExists(TableName.SecretVersion); await dropOnUpdateTrigger(knex, TableName.SecretVersion); } diff --git a/pg-migrator/src/migrations/20240101054849_secret-approval-policy.ts b/pg-migrator/src/migrations/20240101054849_secret-approval-policy.ts index 10d9a1480..7fde0d314 100644 --- a/pg-migrator/src/migrations/20240101054849_secret-approval-policy.ts +++ b/pg-migrator/src/migrations/20240101054849_secret-approval-policy.ts @@ -17,8 +17,8 @@ export async function up(knex: Knex): Promise { } await createOnUpdateTrigger(knex, TableName.SecretApprovalPolicy); - if (!(await knex.schema.hasTable(TableName.SapApprover))) { - await knex.schema.createTable(TableName.SapApprover, (t) => { + if (!(await knex.schema.hasTable(TableName.SecretApprovalPolicyApprover))) { + await knex.schema.createTable(TableName.SecretApprovalPolicyApprover, (t) => { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.uuid("approverId").notNullable(); t.foreign("approverId") @@ -34,12 +34,12 @@ export async function up(knex: Knex): Promise { }); } - await createOnUpdateTrigger(knex, TableName.SapApprover); + await createOnUpdateTrigger(knex, TableName.SecretApprovalPolicyApprover); } export async function down(knex: Knex): Promise { - await knex.schema.dropTableIfExists(TableName.SapApprover); + await knex.schema.dropTableIfExists(TableName.SecretApprovalPolicyApprover); await knex.schema.dropTableIfExists(TableName.SecretApprovalPolicy); - await dropOnUpdateTrigger(knex, TableName.SapApprover); + await dropOnUpdateTrigger(knex, TableName.SecretApprovalPolicyApprover); await dropOnUpdateTrigger(knex, TableName.SecretApprovalPolicy); } diff --git a/pg-migrator/src/migrations/20240101104907_secret-approval-request.ts b/pg-migrator/src/migrations/20240101104907_secret-approval-request.ts index 5fce143c3..98bfb163b 100644 --- a/pg-migrator/src/migrations/20240101104907_secret-approval-request.ts +++ b/pg-migrator/src/migrations/20240101104907_secret-approval-request.ts @@ -22,7 +22,7 @@ export async function up(knex: Knex): Promise { t.foreign("statusChangeBy") .references("id") .inTable(TableName.ProjectMembership) - .onDelete("CASCADE"); + .onDelete("SET NULL"); t.uuid("committerId").notNullable(); t.foreign("committerId") .references("id") @@ -33,8 +33,8 @@ export async function up(knex: Knex): Promise { } await createOnUpdateTrigger(knex, TableName.SecretApprovalRequest); - if (!(await knex.schema.hasTable(TableName.SarReviewer))) { - await knex.schema.createTable(TableName.SarReviewer, (t) => { + if (!(await knex.schema.hasTable(TableName.SecretApprovalRequestReviewer))) { + await knex.schema.createTable(TableName.SecretApprovalRequestReviewer, (t) => { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.uuid("member").notNullable(); t.foreign("member").references("id").inTable(TableName.ProjectMembership).onDelete("CASCADE"); @@ -47,10 +47,10 @@ export async function up(knex: Knex): Promise { t.timestamps(true, true, true); }); } - await createOnUpdateTrigger(knex, TableName.SarReviewer); + await createOnUpdateTrigger(knex, TableName.SecretApprovalRequestReviewer); - if (!(await knex.schema.hasTable(TableName.SarSecret))) { - await knex.schema.createTable(TableName.SarSecret, (t) => { + if (!(await knex.schema.hasTable(TableName.SecretApprovalRequestSecret))) { + await knex.schema.createTable(TableName.SecretApprovalRequestSecret, (t) => { // everything related to secret t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.integer("version").defaultTo(1); @@ -87,29 +87,32 @@ export async function up(knex: Knex): Promise { .onDelete("SET NULL"); }); } - await createOnUpdateTrigger(knex, TableName.SarSecret); + await createOnUpdateTrigger(knex, TableName.SecretApprovalRequestSecret); - if (!(await knex.schema.hasTable(TableName.SarSecretTag))) { - await knex.schema.createTable(TableName.SarSecretTag, (t) => { + if (!(await knex.schema.hasTable(TableName.SecretApprovalRequestSecretTag))) { + await knex.schema.createTable(TableName.SecretApprovalRequestSecretTag, (t) => { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.uuid("secretId").notNullable(); - t.foreign("secretId").references("id").inTable(TableName.SarSecret).onDelete("CASCADE"); + t.foreign("secretId") + .references("id") + .inTable(TableName.SecretApprovalRequestSecret) + .onDelete("CASCADE"); t.uuid("tagId").notNullable(); t.foreign("tagId").references("id").inTable(TableName.SecretTag).onDelete("CASCADE"); t.timestamps(true, true, true); }); } - await createOnUpdateTrigger(knex, TableName.SarSecretTag); + await createOnUpdateTrigger(knex, TableName.SecretApprovalRequestSecretTag); } export async function down(knex: Knex): Promise { - await knex.schema.dropTableIfExists(TableName.SarSecretTag); - await knex.schema.dropTableIfExists(TableName.SarSecret); - await knex.schema.dropTableIfExists(TableName.SarReviewer); + await knex.schema.dropTableIfExists(TableName.SecretApprovalRequestSecretTag); + await knex.schema.dropTableIfExists(TableName.SecretApprovalRequestSecret); + await knex.schema.dropTableIfExists(TableName.SecretApprovalRequestReviewer); await knex.schema.dropTableIfExists(TableName.SecretApprovalRequest); - await dropOnUpdateTrigger(knex, TableName.SarSecretTag); - await dropOnUpdateTrigger(knex, TableName.SarSecret); - await dropOnUpdateTrigger(knex, TableName.SarReviewer); + await dropOnUpdateTrigger(knex, TableName.SecretApprovalRequestSecretTag); + await dropOnUpdateTrigger(knex, TableName.SecretApprovalRequestSecret); + await dropOnUpdateTrigger(knex, TableName.SecretApprovalRequestReviewer); await dropOnUpdateTrigger(knex, TableName.SecretApprovalRequest); }