From 3a98940324b76e181b2fb4927c05fac7cb0cfa12 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 10 Mar 2025 09:16:14 +0000 Subject: [PATCH] [web] switch query for hard-deleting users and add index (#22920) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [web] switch query for hard-deleting users and add index Co-authored-by: Dr. Sasha Göbbels * [web] fix unit tests --------- Co-authored-by: Dr. Sasha Göbbels GitOrigin-RevId: a7fd2a590351d2e0d60c0032ca78d457ef815e41 --- .../web/app/src/Features/User/UserDeleter.js | 4 +-- ...6090001_deletedUsers_non_expired_index.mjs | 29 +++++++++++++++++++ .../test/unit/src/User/UserDeleterTests.js | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 services/web/migrations/20250116090001_deletedUsers_non_expired_index.mjs diff --git a/services/web/app/src/Features/User/UserDeleter.js b/services/web/app/src/Features/User/UserDeleter.js index 2ead415a54..4009419ffe 100644 --- a/services/web/app/src/Features/User/UserDeleter.js +++ b/services/web/app/src/Features/User/UserDeleter.js @@ -95,9 +95,7 @@ async function expireDeletedUsersAfterDuration() { 'deleterData.deletedAt': { $lt: new Date(moment().subtract(DURATION, 'days')), }, - user: { - $ne: null, - }, + user: { $type: 'object' }, }).exec() if (deletedUsers.length === 0) { diff --git a/services/web/migrations/20250116090001_deletedUsers_non_expired_index.mjs b/services/web/migrations/20250116090001_deletedUsers_non_expired_index.mjs new file mode 100644 index 0000000000..7113926e62 --- /dev/null +++ b/services/web/migrations/20250116090001_deletedUsers_non_expired_index.mjs @@ -0,0 +1,29 @@ +import Helpers from './lib/helpers.mjs' + +const tags = ['server-ce', 'server-pro', 'saas'] + +const index = { + key: { 'deleterData.deletedAt': 1 }, + partialFilterExpression: { user: { $type: 'object' } }, + name: 'deleterData_deletedAt_user_1', +} + +const migrate = async client => { + const { db } = client + await Helpers.addIndexesToCollection(db.deletedUsers, [index]) +} + +const rollback = async client => { + const { db } = client + try { + await Helpers.dropIndexesFromCollection(db.deletedUsers, [index]) + } catch (err) { + console.error('Something went wrong rolling back the migrations', err) + } +} + +export default { + tags, + migrate, + rollback, +} diff --git a/services/web/test/unit/src/User/UserDeleterTests.js b/services/web/test/unit/src/User/UserDeleterTests.js index fd800de7aa..7ffaaede55 100644 --- a/services/web/test/unit/src/User/UserDeleterTests.js +++ b/services/web/test/unit/src/User/UserDeleterTests.js @@ -553,7 +553,7 @@ describe('UserDeleter', function () { $lt: new Date(moment().subtract(90, 'days')), }, user: { - $ne: null, + $type: 'object', }, }) .chain('exec')