diff --git a/tools/migrations/20260722120000_create_libraryReferences_trashedAt_indexes.mjs b/tools/migrations/20260722120000_create_libraryReferences_trashedAt_indexes.mjs new file mode 100644 index 0000000000..7fa5f0d162 --- /dev/null +++ b/tools/migrations/20260722120000_create_libraryReferences_trashedAt_indexes.mjs @@ -0,0 +1,36 @@ +import Helpers from './lib/helpers.mjs' + +const tags = ['auxiliary'] + +// Two partial indexes (docs without trashedAt are not indexed) supporting the +// soft-delete (trash) feature +// - userId_1_trashedAt_1__id_1 serves the per-user trash listing/search, +// - trashedAt_1 serves the daily expiry cron's cross-user +const newIndexes = [ + { + key: { userId: 1, trashedAt: 1, _id: 1 }, + name: 'userId_1_trashedAt_1__id_1', + partialFilterExpression: { trashedAt: { $exists: true } }, + }, + { + key: { trashedAt: 1 }, + name: 'trashedAt_1', + partialFilterExpression: { trashedAt: { $exists: true } }, + }, +] + +const migrate = async client => { + const { db } = client + await Helpers.addIndexesToCollection(db.libraryReferences, newIndexes) +} + +const rollback = async client => { + const { db } = client + await Helpers.dropIndexesFromCollection(db.libraryReferences, newIndexes) +} + +export default { + tags, + migrate, + rollback, +}