ensure_affiliations.mjs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { waitForDb } from '../app/src/infrastructure/mongodb.js'
  2. import { User } from '../app/src/models/User.js'
  3. import UserController from '../app/src/Features/User/UserController.js'
  4. import Logger from '@overleaf/logger'
  5. import pLimit from 'p-limit'
  6. Logger.logger.level('error')
  7. const CONCURRENCY = 10
  8. const failure = []
  9. const success = []
  10. console.log('Starting ensure affiliations')
  11. const query = {
  12. 'emails.affiliationUnchecked': true,
  13. }
  14. async function _handleEnsureAffiliation(user) {
  15. try {
  16. await UserController.promises.ensureAffiliation(user)
  17. console.log(`✔ ${user._id}`)
  18. success.push(user._id)
  19. } catch (error) {
  20. failure.push(user._id)
  21. console.log(`ERROR: ${user._id}`, error)
  22. }
  23. }
  24. async function getUsers() {
  25. return User.find(query, { emails: 1 }).exec()
  26. }
  27. async function run() {
  28. const limit = pLimit(CONCURRENCY)
  29. const users = await getUsers()
  30. console.log(`Found ${users.length} users`)
  31. await Promise.all(
  32. users.map(user => limit(() => _handleEnsureAffiliation(user)))
  33. )
  34. console.log(`${success.length} successes`)
  35. console.log(`${failure.length} failures`)
  36. if (failure.length > 0) {
  37. console.log('Failed to update:', failure)
  38. }
  39. }
  40. try {
  41. await waitForDb()
  42. await run()
  43. process.exit()
  44. } catch (error) {
  45. console.log(error)
  46. process.exit(1)
  47. }