Просмотр исходного кода

[web] switch query for hard-deleting users and add index (#22920)

* [web] switch query for hard-deleting users and add index

Co-authored-by: Dr. Sasha Göbbels <sasha.goebbels@overleaf.com>

* [web] fix unit tests

---------

Co-authored-by: Dr. Sasha Göbbels <sasha.goebbels@overleaf.com>
GitOrigin-RevId: a7fd2a590351d2e0d60c0032ca78d457ef815e41
Jakob Ackermann 1 год назад
Родитель
Сommit
087c41190e

+ 1 - 3
services/web/app/src/Features/User/UserDeleter.js

@@ -95,9 +95,7 @@ async function expireDeletedUsersAfterDuration() {
     'deleterData.deletedAt': {
     'deleterData.deletedAt': {
       $lt: new Date(moment().subtract(DURATION, 'days')),
       $lt: new Date(moment().subtract(DURATION, 'days')),
     },
     },
-    user: {
-      $ne: null,
-    },
+    user: { $type: 'object' },
   }).exec()
   }).exec()
 
 
   if (deletedUsers.length === 0) {
   if (deletedUsers.length === 0) {

+ 29 - 0
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,
+}

+ 1 - 1
services/web/test/unit/src/User/UserDeleterTests.js

@@ -553,7 +553,7 @@ describe('UserDeleter', function () {
             $lt: new Date(moment().subtract(90, 'days')),
             $lt: new Date(moment().subtract(90, 'days')),
           },
           },
           user: {
           user: {
-            $ne: null,
+            $type: 'object',
           },
           },
         })
         })
         .chain('exec')
         .chain('exec')