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
This commit is contained in:
Domagoj Kriskovic
2026-01-08 11:48:29 +01:00
committed by Copybot
parent 7931c7b3eb
commit 6de0273d45

View File

@@ -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,
}