Parcourir la source

Process notifications by grouping them per project with caching (#30439)

* Add caching for project updates and file diffs in notifications processing

* Simplify filterNotificationsByPreferences function

* NotificationsEmailBuilder class

* fix cachedRecipient issue

* change processing to group per project

* remove updates cache

* clear cache after processing a project

* refactor: update sendNotificationsForProject to accept project as parameter

* fix unit tests

* apply review suggestions

* feat: add migration script for updating emailNotifications indexes

* refactor: update sendNotificationsForProject to accept projectId

* refactor: simplify fileTreeDiff result assigning

* fix tests

GitOrigin-RevId: bfed061864ba7314f85cf97b7adaeef62c8c5f00
Domagoj Kriskovic il y a 7 mois
Parent
commit
6de0273d45

+ 52 - 0
tools/migrations/20251222142959_emailNotifications_index_update.mjs

@@ -0,0 +1,52 @@
+/* eslint-disable no-unused-vars */
+
+import Helpers from './lib/helpers.mjs'
+import { getCollectionInternal } from './lib/mongodb.mjs'
+
+const tags = ['server-pro', 'saas']
+
+const oldIndexes = [
+  {
+    key: {
+      user_id: 1,
+      recipient_id: 1,
+      project_id: 1,
+    },
+    name: 'user_id_1_recipient_id_1_project_id_1',
+  },
+  {
+    key: {
+      recipient_id: 1,
+    },
+    name: 'recipientId_1',
+    expireAfterSeconds: 60 * 60 * 24, // expire after 24 hours
+  },
+]
+
+const newIndexes = [
+  {
+    key: {
+      project_id: 1,
+    },
+    name: 'project_id_1',
+    expireAfterSeconds: 60 * 60 * 24, // expire after 24 hours
+  },
+]
+
+const migrate = async client => {
+  const emailNotifications = await getCollectionInternal('emailNotifications')
+  await Helpers.dropIndexesFromCollection(emailNotifications, oldIndexes)
+  await Helpers.addIndexesToCollection(emailNotifications, newIndexes)
+}
+
+const rollback = async client => {
+  const emailNotifications = await getCollectionInternal('emailNotifications')
+  await Helpers.dropIndexesFromCollection(emailNotifications, newIndexes)
+  await Helpers.addIndexesToCollection(emailNotifications, oldIndexes)
+}
+
+export default {
+  tags,
+  migrate,
+  rollback,
+}