Files
overleaf-cep/services/web/scripts/remove_feature_from_all_users.mjs
Andrew Rumble 18f44866e5 Merge pull request #29919 from overleaf/revert-29795-ar-last-infrastructure-conversions
Revert "[web] last infrastructure conversions"

GitOrigin-RevId: 48dc64553012afb5d2db4b2eb9c9898489b7e5ef
2025-11-27 09:05:54 +00:00

55 lines
1.3 KiB
JavaScript

import {
db,
READ_PREFERENCE_SECONDARY,
} from '../app/src/infrastructure/mongodb.js'
import parseArgs from 'minimist'
import { scriptRunner } from './lib/ScriptRunner.mjs'
async function _removeFeatureFromAllUsers(feature, commit) {
let removals = 0
const query = {}
query[`features.${feature}`] = true
const usersWithFeature = db.users.find(query, {
readPreference: READ_PREFERENCE_SECONDARY,
})
const update = {}
update[`features.${feature}`] = false
while (await usersWithFeature.hasNext()) {
const user = await usersWithFeature.next()
if (commit) {
await db.users.findOneAndUpdate({ _id: user._id }, { $set: update })
}
removals++
}
console.log(`removed ${feature} from ${removals} users`)
if (!commit) {
console.log(
'this was a dry run, pass --commit to remove features from users'
)
}
}
async function main() {
const argv = parseArgs(process.argv.slice(2), {
string: ['feature'],
boolean: ['commit'],
unknown: function (arg) {
console.error('unrecognised argument', arg)
process.exit(1)
},
})
const feature = argv.feature
const commit = argv.commit || false
await _removeFeatureFromAllUsers(feature, commit)
}
try {
await scriptRunner(main)
console.log('Done')
process.exit(0)
} catch (error) {
console.error(error)
process.exit(1)
}