ensure_affiliations.js 1.2 KB

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