Update project-queue.ts

This commit is contained in:
Daniel Hougaard
2024-02-22 05:00:26 +01:00
parent 0f3ec51d14
commit 28287b8ed4
+25 -2
View File
@@ -49,7 +49,7 @@ export type TProjectQueueFactory = ReturnType<typeof projectQueueFactory>;
type TProjectQueueFactoryDep = { type TProjectQueueFactoryDep = {
queueService: TQueueServiceFactory; queueService: TQueueServiceFactory;
secretVersionDAL: Pick<TSecretVersionDALFactory, "find" | "bulkUpdateNoVersionIncrement">; secretVersionDAL: Pick<TSecretVersionDALFactory, "find" | "bulkUpdateNoVersionIncrement" | "delete">;
folderDAL: Pick<TSecretFolderDALFactory, "find">; folderDAL: Pick<TSecretFolderDALFactory, "find">;
secretDAL: Pick<TSecretDALFactory, "find" | "bulkUpdateNoVersionIncrement">; secretDAL: Pick<TSecretDALFactory, "find" | "bulkUpdateNoVersionIncrement">;
projectKeyDAL: Pick<TProjectKeyDALFactory, "findLatestProjectKey" | "find" | "create" | "delete" | "insertMany">; projectKeyDAL: Pick<TProjectKeyDALFactory, "findLatestProjectKey" | "find" | "create" | "delete" | "insertMany">;
@@ -133,6 +133,7 @@ export const projectQueueFactory = ({
const secrets: TSecrets[] = []; const secrets: TSecrets[] = [];
const secretVersions: TSecretVersions[] = []; const secretVersions: TSecretVersions[] = [];
const approvalSecrets: TSecretApprovalRequestsSecrets[] = []; const approvalSecrets: TSecretApprovalRequestsSecrets[] = [];
const folderSecretVersionIdsToDelete: string[] = [];
for (const folder of projectFolders) { for (const folder of projectFolders) {
const folderSecrets = await secretDAL.find({ folderId: folder.id }); const folderSecrets = await secretDAL.find({ folderId: folder.id });
@@ -142,9 +143,21 @@ export const projectQueueFactory = ({
}, },
// Only get the latest 100 secret versions for each folder. // Only get the latest 100 secret versions for each folder.
{ {
limit: 100 limit: 100,
sort: [["createdAt", "desc"]]
} }
); );
const deletedSecretVersions = await secretVersionDAL.find(
{
folderId: folder.id
},
{
offset: 100
}
);
folderSecretVersionIdsToDelete.push(...deletedSecretVersions.map((el) => el.id));
const approvalRequests = await secretApprovalRequestDAL.find({ const approvalRequests = await secretApprovalRequestDAL.find({
status: RequestState.Open, status: RequestState.Open,
folderId: folder.id folderId: folder.id
@@ -481,6 +494,16 @@ export const projectQueueFactory = ({
tx tx
); );
// Delete all secret versions that are no longer needed. We only store the latest 100 versions for each secret.
await secretVersionDAL.delete(
{
$in: {
id: folderSecretVersionIdsToDelete
}
},
tx
);
if ( if (
secretUpdates.length !== updatedSecrets.length || secretUpdates.length !== updatedSecrets.length ||
secretVersionUpdates.length !== updatedSecretVersions.length || secretVersionUpdates.length !== updatedSecretVersions.length ||