Просмотр исходного кода

Add migration to remove holding accounts

James Allen 9 лет назад
Родитель
Сommit
05540ca8a7
2 измененных файлов с 62 добавлено и 2 удалено
  1. 53 0
      migrations/5_remove_holding_accounts.coffee
  2. 9 2
      migrations/about_migrations.md

+ 53 - 0
migrations/5_remove_holding_accounts.coffee

@@ -0,0 +1,53 @@
+Settings = require "settings-sharelatex"
+mongojs = require("mongojs")
+ObjectId = mongojs.ObjectId
+db = mongojs(Settings.mongo.url, ['users', 'projects'])
+async = require "async"
+
+findHoldingAccounts = (callback = (error, users) ->) ->
+	db.users.find({holdingAccount: true}, {holdingAccount: 1, email: 1}, callback)
+
+deleteUserProjects = (user_id, callback = (error) ->) ->
+	# Holding accounts can't own projects, so only remove from 
+	# collaberator_refs and readOnly_refs
+	console.log "[Removing user from projects]", user_id
+	db.projects.update {
+		$or: [
+			{collaberator_refs: user_id},
+			{readOnly_refs: user_id}
+		]
+	}, {
+		$pull: {
+			collaberator_refs: user_id,
+			readOnly_refs: user_id
+		}
+	}, {
+		multi: true
+	}, (error, result) ->
+		console.log "[Removed user from projects]", user_id, result
+		callback(error)
+
+deleteUser = (user_id, callback = (error) ->) ->
+	if !user_id?
+		throw new Error("must have user_id")
+	console.log "[Removing user]", user_id
+	db.users.remove {_id: user_id}, (error, result) ->
+		console.log "[Removed user]", user_id, result
+		callback(error)
+
+exports.migrate = (client, done=()->) ->
+	findHoldingAccounts (error, users) ->
+		throw error if error?
+		console.log "[Got list of holding accounts]", users.map (u) -> u._id
+		jobs = users.map (u) ->
+			(cb) ->
+				deleteUserProjects u._id, (error) ->
+					return cb(error) if error?
+					deleteUser u._id, cb
+		async.series jobs, (error) ->
+			throw error if error?
+			console.log "[Removed holding accounts]"
+			done()
+			
+exports.rollback = (client, done) ->
+	done()

+ 9 - 2
migrations/about_migrations.md

@@ -1,2 +1,9 @@
-* if migration is stopped mid way it will start at the beginging next time
-* to see the run migrations do db.getCollection('_migrations').find() you can't do db._migrations.find()
+If migration is stopped mid way it will start at the beginging next time
+
+To see the run migrations do db.getCollection('_migrations').find() you can't do db._migrations.find()
+
+When testing, to roll back a migration run:
+
+```
+./node_modules/east/bin/east rollback 5 --adapter east-mongo --url mongodb://localhost:27017/sharelatex
+```