From ab093dfc852c6bfa4c76db5095c45ab2b819ede9 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Mon, 3 Jun 2024 12:49:40 +0800 Subject: [PATCH] misc: simplified delete query for secret folder version --- .../secret-folder-version-dal.ts | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/backend/src/services/secret-folder/secret-folder-version-dal.ts b/backend/src/services/secret-folder/secret-folder-version-dal.ts index 2f32001dc..e9c247b52 100644 --- a/backend/src/services/secret-folder/secret-folder-version-dal.ts +++ b/backend/src/services/secret-folder/secret-folder-version-dal.ts @@ -62,32 +62,27 @@ export const secretFolderVersionDALFactory = (db: TDbClient) => { } }; - const pruneExcessVersions = async (tx?: Knex) => { + const pruneExcessVersions = async () => { try { - const rankedFolderVersions = (tx || db)(TableName.SecretFolderVersion) - .select( - "id", - "folderId", - (tx || db).raw( - `ROW_NUMBER() OVER (PARTITION BY ${TableName.SecretFolderVersion}."folderId" ORDER BY ${TableName.SecretFolderVersion}."createdAt" DESC) AS row_num` - ) - ) - .as("ranked_folder_versions"); - - const folderLimits = (tx || db)(TableName.SecretFolderVersion) - .join(TableName.Environment, `${TableName.Environment}.id`, `${TableName.SecretFolderVersion}.envId`) - .join(TableName.Project, `${TableName.Project}.id`, `${TableName.Environment}.projectId`) - .groupBy(`${TableName.SecretFolderVersion}.folderId`, `${TableName.Project}.pitVersionLimit`) - .select("folderId", "pitVersionLimit") - .as("folder_limits"); - - const versionsToKeep = (tx || db)(rankedFolderVersions) - .select("id") - .from(rankedFolderVersions) - .join(folderLimits, "folder_limits.folderId", "ranked_folder_versions.folderId") - .whereRaw(`ranked_folder_versions.row_num <= folder_limits."pitVersionLimit"`); - - await (tx || db)(TableName.SecretFolderVersion).whereNotIn("id", versionsToKeep).delete(); + await secretFolderVerOrm.transaction((txn) => { + return txn(TableName.SecretFolderVersion) + .with("folder_cte", (qb) => { + void qb + .from(TableName.SecretFolderVersion) + .select( + "id", + "folderId", + txn.raw( + `ROW_NUMBER() OVER (PARTITION BY ${TableName.SecretFolderVersion}."folderId" ORDER BY ${TableName.SecretFolderVersion}."createdAt" DESC) AS row_num` + ) + ); + }) + .join(TableName.Environment, `${TableName.Environment}.id`, `${TableName.SecretFolderVersion}.envId`) + .join(TableName.Project, `${TableName.Project}.id`, `${TableName.Environment}.projectId`) + .join("folder_cte", "folder_cte.id", `${TableName.SecretFolderVersion}.id`) + .whereRaw(`folder_cte.row_num > ${TableName.Project}."pitVersionLimit"`) + .delete(); + }); } catch (error) { throw new DatabaseError({ error,