ensure_affiliations.js 1.3 KB

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