Merge pull request #25467 from overleaf/bg-fix-error-handling-when-accounts-are-deleted

improve logging deleted when user data is expired

GitOrigin-RevId: ac85b66c503184a815348a11a730fb68a504d80a
This commit is contained in:
Brian Gough
2025-06-05 08:06:27 +00:00
committed by Copybot
parent 11e410c9c0
commit 1e6112d5b0
@@ -87,17 +87,29 @@ async function deleteMongoUser(userId) {
}
async function expireDeletedUser(userId) {
await Modules.promises.hooks.fire('expireDeletedUser', userId)
const deletedUser = await DeletedUser.findOne({
'deleterData.deletedUserId': userId,
}).exec()
await Feedback.deleteMany({ userId }).exec()
await OnboardingDataCollectionManager.deleteOnboardingDataCollection(userId)
deletedUser.user = undefined
deletedUser.deleterData.deleterIpAddress = undefined
await deletedUser.save()
logger.info({ userId }, 'expiring deleted user')
try {
logger.info({ userId }, 'firing expireDeletedUser hook')
await Modules.promises.hooks.fire('expireDeletedUser', userId)
logger.info({ userId }, 'removing deleted user feedback records')
await Feedback.deleteMany({ userId }).exec()
logger.info({ userId }, 'removing deleted user onboarding data')
await OnboardingDataCollectionManager.deleteOnboardingDataCollection(userId)
logger.info({ userId }, 'redacting PII from the deleted user record')
const deletedUser = await DeletedUser.findOne({
'deleterData.deletedUserId': userId,
}).exec()
deletedUser.user = undefined
deletedUser.deleterData.deleterIpAddress = undefined
await deletedUser.save()
logger.info({ userId }, 'deleted user expiry complete')
} catch (error) {
logger.warn(
{ error, userId },
'something went wrong expiring the deleted user'
)
throw error
}
}
async function expireDeletedUsersAfterDuration() {
@@ -112,11 +124,27 @@ async function expireDeletedUsersAfterDuration() {
if (deletedUsers.length === 0) {
return
}
for (let i = 0; i < deletedUsers.length; i++) {
const deletedUserId = deletedUsers[i].deleterData.deletedUserId
await expireDeletedUser(deletedUserId)
await UserAuditLogEntry.deleteMany({ userId: deletedUserId }).exec()
logger.info(
{ deletedUsers: deletedUsers.length, retentionPeriodInDays: DURATION },
'expiring batch of deleted users older than retention period'
)
try {
for (let i = 0; i < deletedUsers.length; i++) {
const deletedUserId = deletedUsers[i].deleterData.deletedUserId
await expireDeletedUser(deletedUserId)
logger.info({ deletedUserId }, 'removing deleted user audit log entries')
await UserAuditLogEntry.deleteMany({ userId: deletedUserId }).exec()
}
logger.info(
{ deletedUsers: deletedUsers.length },
'batch of deleted users expired successfully'
)
} catch (error) {
logger.warn(
{ error },
'something went wrong expiring batch of deleted users'
)
throw error
}
}