|
|
@@ -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)
|
|
|
+}
|