From a966a5f9d7f1f978791e35e7031b3b460a46de7d Mon Sep 17 00:00:00 2001 From: Eric Mc Sween Date: Thu, 1 Jul 2021 11:02:37 -0400 Subject: [PATCH] Merge pull request #4255 from overleaf/em-active-projects-expire-2 Create the deleted project record later when deleting a project GitOrigin-RevId: 2ed21fb4623f4f27be0ed6ca8132cd81aa0a7ced --- .../src/Features/Project/ProjectDeleter.js | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/services/web/app/src/Features/Project/ProjectDeleter.js b/services/web/app/src/Features/Project/ProjectDeleter.js index ec5ccfa20e..c388d1d6a7 100644 --- a/services/web/app/src/Features/Project/ProjectDeleter.js +++ b/services/web/app/src/Features/Project/ProjectDeleter.js @@ -205,6 +205,36 @@ async function deleteProject(projectId, options = {}) { throw new Errors.NotFoundError('project not found') } + await DocumentUpdaterHandler.promises.flushProjectToMongoAndDelete( + projectId + ) + + try { + // OPTIMIZATION: flush docs out of mongo + await DocstoreManager.promises.archiveProject(projectId) + } catch (err) { + // It is OK to fail here, the docs will get hard-deleted eventually after + // the grace-period for soft-deleted projects has passed. + logger.warn( + { projectId, err }, + 'failed archiving doc via docstore as part of project soft-deletion' + ) + } + + const memberIds = await CollaboratorsGetter.promises.getMemberIds(projectId) + + // fire these jobs in the background + for (const memberId of memberIds) { + TagsHandler.promises + .removeProjectFromAllTags(memberId, projectId) + .catch(err => { + logger.err( + { err, memberId, projectId }, + 'failed to remove project from tags' + ) + }) + } + const deleterData = { deletedAt: new Date(), deleterId: @@ -239,36 +269,6 @@ async function deleteProject(projectId, options = {}) { { upsert: true } ) - await DocumentUpdaterHandler.promises.flushProjectToMongoAndDelete( - projectId - ) - - try { - // OPTIMIZATION: flush docs out of mongo - await DocstoreManager.promises.archiveProject(projectId) - } catch (err) { - // It is OK to fail here, the docs will get hard-deleted eventually after - // the grace-period for soft-deleted projects has passed. - logger.warn( - { projectId, err }, - 'failed archiving doc via docstore as part of project soft-deletion' - ) - } - - const memberIds = await CollaboratorsGetter.promises.getMemberIds(projectId) - - // fire these jobs in the background - for (const memberId of memberIds) { - TagsHandler.promises - .removeProjectFromAllTags(memberId, projectId) - .catch(err => { - logger.err( - { err, memberId, projectId }, - 'failed to remove project from tags' - ) - }) - } - await Project.deleteOne({ _id: projectId }).exec() } catch (err) { logger.warn({ err }, 'problem deleting project')