diff --git a/src/user/delete.js b/src/user/delete.js index 778d270ecc..2fc444da42 100644 --- a/src/user/delete.js +++ b/src/user/delete.js @@ -22,35 +22,12 @@ module.exports = function(User) { function(next) { deleteTopics(uid, next); }, - function(next) { - deleteVotes(uid, next); - }, function(next) { User.deleteAccount(uid, next); } ], callback); }; - function deleteVotes(uid, callback) { - async.waterfall([ - function (next) { - async.parallel({ - upvotedPids: async.apply(db.getSortedSetRange, 'uid:' + uid + ':upvote', 0, -1), - downvotedPids: async.apply(db.getSortedSetRange, 'uid:' + uid + ':downvote', 0, -1) - }, next); - }, - function (pids, next) { - pids = pids.upvotedPids.concat(pids.downvotedPids).filter(function(pid, index, array) { - return pid && array.indexOf(pid) === index; - }); - - async.eachLimit(pids, 50, function(pid, next) { - favourites.unvote(pid, uid, next); - }, next); - } - ], callback); - } - function deletePosts(uid, callback) { deleteSortedSetElements('uid:' + uid + ':posts', posts.purge, callback); } @@ -66,18 +43,19 @@ module.exports = function(User) { } User.deleteAccount = function(uid, callback) { - User.getUserFields(uid, ['username', 'userslug', 'fullname', 'email'], function(err, userData) { - if (err) { - return callback(err); - } - - plugins.fireHook('static:user.delete', { - uid: uid - }, function(err) { - if (err) { - return callback(err); - } - + var userData; + async.waterfall([ + function (next) { + User.getUserFields(uid, ['username', 'userslug', 'fullname', 'email'], next); + }, + function (_userData, next) { + userData = _userData; + plugins.fireHook('static:user.delete', {uid: uid}, next); + }, + function (next) { + deleteVotes(uid, next); + }, + function (next) { async.parallel([ function(next) { db.sortedSetRemove('username:uid', userData.username, next); @@ -137,16 +115,35 @@ module.exports = function(User) { // Deprecated as of v0.7.4, remove in v1.0.0 plugins.fireHook('filter:user.delete', uid, next); } - ], function(err) { - if (err) { - return callback(err); - } + ], next); + }, + function (results, next) { + db.deleteAll(['followers:' + uid, 'following:' + uid, 'user:' + uid], next); + } + ], callback); + }; - db.deleteAll(['followers:' + uid, 'following:' + uid, 'user:' + uid], callback); + function deleteVotes(uid, callback) { + async.waterfall([ + function (next) { + async.parallel({ + upvotedPids: async.apply(db.getSortedSetRange, 'uid:' + uid + ':upvote', 0, -1), + downvotedPids: async.apply(db.getSortedSetRange, 'uid:' + uid + ':downvote', 0, -1) + }, next); + }, + function (pids, next) { + pids = pids.upvotedPids.concat(pids.downvotedPids).filter(function(pid, index, array) { + return pid && array.indexOf(pid) === index; }); - }); + + async.eachLimit(pids, 50, function(pid, next) { + favourites.unvote(pid, uid, next); + }, next); + } + ], function(err) { + callback(err); }); - }; + } function deleteUserIps(uid, callback) { async.waterfall([