From 71972f9ffb6e73c3af055c314fd6e0eace5c03d2 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Wed, 29 Oct 2025 00:15:07 +0800 Subject: [PATCH] misc: separate migration steps for remvoing fk and orphaned identities --- ...0251019061215_sub-org-identity-backfill.ts | 5 ----- ...-access-token-remove-fk-for-identity-id.ts | 22 +++++++++++++++++++ ...20251028160921_delete-no-org-identities.ts | 20 +++++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 backend/src/db/migrations/20251028155708_identity-access-token-remove-fk-for-identity-id.ts create mode 100644 backend/src/db/migrations/20251028160921_delete-no-org-identities.ts diff --git a/backend/src/db/migrations/20251019061215_sub-org-identity-backfill.ts b/backend/src/db/migrations/20251019061215_sub-org-identity-backfill.ts index 71e8924d4..9054a03ee 100644 --- a/backend/src/db/migrations/20251019061215_sub-org-identity-backfill.ts +++ b/backend/src/db/migrations/20251019061215_sub-org-identity-backfill.ts @@ -38,11 +38,6 @@ export async function up(knex: Knex): Promise { .merge(); } } - - await tx(TableName.Identity).whereNull("orgId").delete(); - await tx.schema.alterTable(TableName.Identity, (t) => { - t.uuid("orgId").notNullable().alter(); - }); } }); } diff --git a/backend/src/db/migrations/20251028155708_identity-access-token-remove-fk-for-identity-id.ts b/backend/src/db/migrations/20251028155708_identity-access-token-remove-fk-for-identity-id.ts new file mode 100644 index 000000000..0974f39c2 --- /dev/null +++ b/backend/src/db/migrations/20251028155708_identity-access-token-remove-fk-for-identity-id.ts @@ -0,0 +1,22 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; + +export async function up(knex: Knex): Promise { + await knex.transaction(async (tx) => { + await tx.schema.alterTable(TableName.IdentityAccessToken, (table) => { + table.dropForeign("identityId"); + }); + }); +} + +export async function down(knex: Knex): Promise { + await knex.transaction(async (tx) => { + await tx.schema.alterTable(TableName.IdentityAccessToken, (table) => { + table.foreign("identityId").references("id").inTable(TableName.Identity); + }); + }); +} + +const config = { transaction: false }; +export { config }; diff --git a/backend/src/db/migrations/20251028160921_delete-no-org-identities.ts b/backend/src/db/migrations/20251028160921_delete-no-org-identities.ts new file mode 100644 index 000000000..bf4692cf0 --- /dev/null +++ b/backend/src/db/migrations/20251028160921_delete-no-org-identities.ts @@ -0,0 +1,20 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; + +export async function up(knex: Knex): Promise { + await knex.transaction(async (tx) => { + const hasIdentityOrgCol = await tx.schema.hasColumn(TableName.Identity, "orgId"); + if (hasIdentityOrgCol) { + await tx(TableName.Identity).whereNull("orgId").delete(); + await tx.schema.alterTable(TableName.Identity, (t) => { + t.uuid("orgId").notNullable().alter(); + }); + } + }); +} + +export async function down(): Promise {} + +const config = { transaction: false }; +export { config };