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')