diff --git a/migrations/9_create_user_emails_array.js b/migrations/9_create_user_emails_array.js new file mode 100644 index 0000000000..08e9fb06f6 --- /dev/null +++ b/migrations/9_create_user_emails_array.js @@ -0,0 +1,49 @@ +const Settings = require('settings-sharelatex') +const mongojs = require('mongojs') +const db = mongojs(Settings.mongo.url, ['users']) +const async = require('async') + +const handleExit = () => console.log('Got signal. Shutting down.') +process.on('SIGINT', handleExit) +process.on('SIGHUP', handleExit) + +const initUserEmailsAttribute = (user, callback) => { + const update = { + $set: { + emails: [ + { + email: user.email, + createdAt: new Date() + } + ] + } + } + db.users.update({ _id: user._id }, update, callback) +} + +const updateAllUsersEmailsAttribute = (users, callback) => { + console.log(`updating ${user.length} users`) + async.eachSeries(users, initUserEmailsAttribute, callback) +} + +exports.migrate = (client, done) => + db.users.find( + { emails: { $exists: false } }, + { email: 1 }, + (error, users) => { + if (error) { + callback(error) + } else { + updateAllUsersEmailsAttribute(users, done) + } + } + ) + +exports.rollback = (client, done) => { + const update = { + $unset: { + emails: 1 + } + } + db.users.update({ emails: { $exists: true } }, update, done) +}