9_create_user_emails_array.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. const Settings = require('settings-sharelatex')
  2. const mongojs = require('mongojs')
  3. const db = mongojs(Settings.mongo.url, ['users'])
  4. const async = require('async')
  5. const handleExit = () => console.log('Got signal. Shutting down.')
  6. process.on('SIGINT', handleExit)
  7. process.on('SIGHUP', handleExit)
  8. const initUserEmailsAttribute = (user, callback) => {
  9. const update = {
  10. $set: {
  11. emails: [
  12. {
  13. email: user.email,
  14. createdAt: new Date()
  15. }
  16. ]
  17. }
  18. }
  19. db.users.update({ _id: user._id }, update, callback)
  20. }
  21. const updateAllUsersEmailsAttribute = (users, callback) => {
  22. console.log(`updating ${users.length} users`)
  23. async.eachSeries(users, initUserEmailsAttribute, callback)
  24. }
  25. exports.migrate = (client, done) =>
  26. db.users.find(
  27. { emails: { $exists: false } },
  28. { email: 1 },
  29. (error, users) => {
  30. if (error) {
  31. callback(error)
  32. } else {
  33. updateAllUsersEmailsAttribute(users, done)
  34. }
  35. }
  36. )
  37. exports.rollback = (client, done) => {
  38. const update = {
  39. $unset: {
  40. emails: 1
  41. }
  42. }
  43. db.users.update({ emails: { $exists: true } }, update, done)
  44. }