const { waitForDb } = require('../app/src/infrastructure/mongodb') const { User } = require('../app/src/models/User') const UserController = require('../app/src/Features/User/UserController') require('@overleaf/logger').logger.level('error') const pLimit = require('p-limit') const CONCURRENCY = 10 const failure = [] const success = [] console.log('Starting ensure affiliations') const query = { 'emails.affiliationUnchecked': true, } async function _handleEnsureAffiliation(user) { try { await UserController.promises.ensureAffiliation(user) console.log(`✔ ${user._id}`) success.push(user._id) } catch (error) { failure.push(user._id) console.log(`ERROR: ${user._id}`, error) } } async function getUsers() { return User.find(query, { emails: 1 }).exec() } async function run() { const limit = pLimit(CONCURRENCY) const users = await getUsers() console.log(`Found ${users.length} users`) await Promise.all( users.map(user => limit(() => _handleEnsureAffiliation(user))) ) console.log(`${success.length} successes`) console.log(`${failure.length} failures`) if (failure.length > 0) { console.log('Failed to update:', failure) } } waitForDb() .then(run) .then(() => { process.exit() }) .catch(error => { console.log(error) process.exit(1) })