diff --git a/services/web/app/src/infrastructure/mongodb.js b/services/web/app/src/infrastructure/mongodb.js index e258997321..611463e8cc 100644 --- a/services/web/app/src/infrastructure/mongodb.js +++ b/services/web/app/src/infrastructure/mongodb.js @@ -53,6 +53,7 @@ const db = { migrations: internalDb.collection('migrations'), notifications: internalDb.collection('notifications'), emailNotifications: internalDb.collection('emailNotifications'), + notificationsPreferences: internalDb.collection('notificationsPreferences'), oauthAccessTokens: internalDb.collection('oauthAccessTokens'), oauthApplications: internalDb.collection('oauthApplications'), oauthAuthorizationCodes: internalDb.collection('oauthAuthorizationCodes'), diff --git a/tools/migrations/20251110151140_create_notificationsPreferences_collection.mjs b/tools/migrations/20251110151140_create_notificationsPreferences_collection.mjs new file mode 100644 index 0000000000..113e3f8ffe --- /dev/null +++ b/tools/migrations/20251110151140_create_notificationsPreferences_collection.mjs @@ -0,0 +1,36 @@ +import Helpers from './lib/helpers.mjs' +import { getCollectionInternal } from './lib/mongodb.mjs' + +const tags = ['server-ce', 'server-pro', 'saas'] + +const indexes = [ + { + // compound index for querying both global (project_id: null) and project-specific notification preferences + key: { + user_id: 1, + project_id: 1, + }, + unique: true, + name: 'user_id_1_project_id_1', + }, +] + +const migrate = async () => { + const notificationsPreferences = await getCollectionInternal( + 'notificationsPreferences' + ) + await Helpers.addIndexesToCollection(notificationsPreferences, indexes) +} + +const rollback = async () => { + const notificationsPreferences = await getCollectionInternal( + 'notificationsPreferences' + ) + await Helpers.dropIndexesFromCollection(notificationsPreferences, indexes) +} + +export default { + tags, + migrate, + rollback, +}