From 2027d4b44e932ab04bcd3b377ae5ecd73f0a7a9c Mon Sep 17 00:00:00 2001 From: = Date: Tue, 19 Nov 2024 02:17:25 +0530 Subject: [PATCH] feat: moved auth method deletion to top --- ...14084900_identity-multiple-auth-methods.ts | 31 ++++--------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/backend/src/db/migrations/20241014084900_identity-multiple-auth-methods.ts b/backend/src/db/migrations/20241014084900_identity-multiple-auth-methods.ts index dc83d231e..7a6bd3e1f 100644 --- a/backend/src/db/migrations/20241014084900_identity-multiple-auth-methods.ts +++ b/backend/src/db/migrations/20241014084900_identity-multiple-auth-methods.ts @@ -13,19 +13,12 @@ export async function up(knex: Knex): Promise { }); // first we remove identities without auth method that is unused - let nullableAuthMethodIdentities = []; - do { - const findNullableAuthMethodIdentities = knex(TableName.Identity) - .whereNull("authMethod") - .limit(BATCH_SIZE) - .select("id"); - - // eslint-disable-next-line no-await-in-loop - nullableAuthMethodIdentities = await knex(TableName.Identity) - .whereIn("id", findNullableAuthMethodIdentities) - .del() - .returning("id"); - } while (nullableAuthMethodIdentities.length > 0); + // ! We delete all access tokens where the identity has no auth method set! + // ! Which means un-configured identities that for some reason have access tokens, will have their access tokens deleted. + await knex(TableName.IdentityAccessToken) + .leftJoin(TableName.Identity, `${TableName.Identity}.id`, `${TableName.IdentityAccessToken}.identityId`) + .whereNull(`${TableName.Identity}.authMethod`) + .delete(); let nullableAccessTokens = await knex(TableName.IdentityAccessToken) .whereNull("authMethod") @@ -60,18 +53,6 @@ export async function up(knex: Knex): Promise { console.log(`Updated ${batchIds.length} access tokens in batch <> Total updated: ${totalUpdated}`); } while (nullableAccessTokens.length > 0); - // ! We delete all access tokens where the identity has no auth method set! - // ! Which means un-configured identities that for some reason have access tokens, will have their access tokens deleted. - await knex(TableName.IdentityAccessToken) - .whereNotExists((queryBuilder) => { - void queryBuilder - .select("id") - .from(TableName.Identity) - .whereRaw(`${TableName.IdentityAccessToken}."identityId" = ${TableName.Identity}.id`) - .whereNotNull("authMethod"); - }) - .delete(); - // Finally we set the authMethod to notNullable after populating the column. // This will fail if the data is not populated correctly, so it's safe. await knex.schema.alterTable(TableName.IdentityAccessToken, (t) => {