overleaf/services/web/migrations/20230405190240_oauth_refresh_tokens_index.mjs
Liangjun Song 492fe24a75 Merge pull request #20480 from overleaf/ls-convert-migration-scripts-to-esm
Convert migration scripts to ESM

GitOrigin-RevId: 46f04a1837ebb8244b1156af2d58162d024b6b2d
2024-10-14 10:56:57 +00:00

53 lines
1.6 KiB
JavaScript

import Helpers from './lib/helpers.mjs'
const tags = ['server-ce', 'server-pro', 'saas']
const OLD_INDEX = {
key: { refreshToken: 1 },
name: 'refreshToken_1',
unique: true,
}
const NEW_INDEX = {
key: { refreshToken: 1 },
name: 'refreshToken_1',
unique: true,
partialFilterExpression: { refreshToken: { $exists: true } },
}
const TMP_INDEX = {
key: { refreshToken: 1, dummyField: 1 },
name: 'refreshToken_tmp',
}
const migrate = async client => {
const { db } = client
// Create a temporary index so that the refresh tokens are not left unindexed
// while we drop the index and recreate it.
await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX])
// Drop and recreate the index with different options
await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [OLD_INDEX])
await Helpers.addIndexesToCollection(db.oauthAccessTokens, [NEW_INDEX])
// Drop the temporary index
await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX])
}
const rollback = async client => {
const { db } = client
// Create a temporary index so that the refresh tokens are not left unindexed
// while we drop the index and recreate it.
await Helpers.addIndexesToCollection(db.oauthAccessTokens, [TMP_INDEX])
// Drop and recreate the index with different options
await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [NEW_INDEX])
await Helpers.addIndexesToCollection(db.oauthAccessTokens, [OLD_INDEX])
// Drop the temporary index
await Helpers.dropIndexesFromCollection(db.oauthAccessTokens, [TMP_INDEX])
}
export default {
tags,
migrate,
rollback,
}