ensure_affiliations.mjs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { User } from '../app/src/models/User.js'
  2. import UserController from '../app/src/Features/User/UserController.js'
  3. import Logger from '@overleaf/logger'
  4. import pLimit from 'p-limit'
  5. Logger.logger.level('error')
  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. try {
  40. await run()
  41. process.exit()
  42. } catch (error) {
  43. console.log(error)
  44. process.exit(1)
  45. }