overleaf/services/web/app/coffee/Features/User/UserDeleter.coffee

70 lines
2.3 KiB
CoffeeScript
Raw Normal View History

2014-02-12 05:23:40 -05:00
User = require("../../models/User").User
NewsletterManager = require "../Newsletter/NewsletterManager"
2014-02-12 05:23:40 -05:00
ProjectDeleter = require("../Project/ProjectDeleter")
logger = require("logger-sharelatex")
SubscriptionHandler = require("../Subscription/SubscriptionHandler")
SubscriptionUpdater = require("../Subscription/SubscriptionUpdater")
UserMembershipsHandler = require("../UserMembership/UserMembershipsHandler")
async = require("async")
InstitutionsAPI = require("../Institutions/InstitutionsAPI")
Errors = require("../Errors/Errors")
{db, ObjectId} = require("../../infrastructure/mongojs")
2014-02-12 05:23:40 -05:00
module.exports = UserDeleter =
softDeleteUserForMigration: (user_id, callback = (err)->)->
if !user_id?
logger.err "user_id is null when trying to delete user"
return callback(new Error("no user_id"))
User.findById user_id, (err, user)->
return callback(err) if err?
return callback(new Errors.NotFoundError("user not found")) unless user?
async.series([
(cb) ->
UserDeleter._cleanupUser user, cb
(cb) ->
ProjectDeleter.softDeleteUsersProjectsForMigration user._id, cb
(cb) ->
user.deletedAt = new Date()
db.usersDeletedByMigration.insert user, cb
(cb) ->
user.remove cb
], callback)
2014-02-12 05:23:40 -05:00
deleteUser: (user_id, callback = ()->)->
if !user_id?
logger.err "user_id is null when trying to delete user"
return callback("no user_id")
User.findById user_id, (err, user)->
if err?
return callback(err)
logger.log user:user, "deleting user"
async.series [
(cb)->
UserDeleter._cleanupUser user, cb
(cb)->
ProjectDeleter.deleteUsersProjects user._id, cb
(cb)->
user.remove cb
], (err)->
2014-02-12 05:23:40 -05:00
if err?
logger.err err:err, user_id:user_id, "something went wrong deleteing the user"
callback err
_cleanupUser: (user, callback) ->
return callback(new Error("no user supplied")) unless user?
async.series([
(cb)->
NewsletterManager.unsubscribe user, (err) ->
logger.err("Failed to unsubscribe user from newsletter", user_id: user._id, error: err)
cb()
(cb)->
SubscriptionHandler.cancelSubscription user, cb
(cb)->
InstitutionsAPI.deleteAffiliations user._id, cb
(cb)->
SubscriptionUpdater.removeUserFromAllGroups user._id, cb
(cb)->
UserMembershipsHandler.removeUserFromAllEntities user._id, cb
], callback)