mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-11 00:15:46 +01:00
change user delete so it returns quickly
This commit is contained in:
@@ -15,12 +15,20 @@ var batch = require('../batch');
|
||||
var file = require('../file');
|
||||
|
||||
module.exports = function (User) {
|
||||
var deletesInProgress = {};
|
||||
|
||||
User.delete = function (callerUid, uid, callback) {
|
||||
if (!parseInt(uid, 10)) {
|
||||
return callback(new Error('[[error:invalid-uid]]'));
|
||||
return setImmediate(callback, new Error('[[error:invalid-uid]]'));
|
||||
}
|
||||
|
||||
if (deletesInProgress[uid]) {
|
||||
return setImmediate(callback);
|
||||
}
|
||||
deletesInProgress[uid] = 'user.delete';
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
removeFromSortedSets(uid, next);
|
||||
},
|
||||
function (next) {
|
||||
deletePosts(callerUid, uid, next);
|
||||
},
|
||||
@@ -67,14 +75,38 @@ module.exports = function (User) {
|
||||
}, { alwaysStartAt: 0 }, callback);
|
||||
}
|
||||
|
||||
function removeFromSortedSets(uid, callback) {
|
||||
db.sortedSetsRemove([
|
||||
'users:joindate',
|
||||
'users:postcount',
|
||||
'users:reputation',
|
||||
'users:banned',
|
||||
'users:banned:expire',
|
||||
'users:flags',
|
||||
'users:online',
|
||||
'users:notvalidated',
|
||||
'digest:day:uids',
|
||||
'digest:week:uids',
|
||||
'digest:month:uids',
|
||||
], uid, callback);
|
||||
}
|
||||
|
||||
User.deleteAccount = function (uid, callback) {
|
||||
if (deletesInProgress[uid] === 'user.deleteAccount') {
|
||||
return setImmediate(callback);
|
||||
}
|
||||
deletesInProgress[uid] = 'user.deleteAccount';
|
||||
var userData;
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
removeFromSortedSets(uid, next);
|
||||
},
|
||||
function (next) {
|
||||
db.getObject('user:' + uid, next);
|
||||
},
|
||||
function (_userData, next) {
|
||||
if (!_userData || !_userData.username) {
|
||||
delete deletesInProgress[uid];
|
||||
return callback();
|
||||
}
|
||||
userData = _userData;
|
||||
@@ -113,20 +145,6 @@ module.exports = function (User) {
|
||||
next();
|
||||
}
|
||||
},
|
||||
function (next) {
|
||||
db.sortedSetsRemove([
|
||||
'users:joindate',
|
||||
'users:postcount',
|
||||
'users:reputation',
|
||||
'users:banned',
|
||||
'users:banned:expire',
|
||||
'users:online',
|
||||
'users:notvalidated',
|
||||
'digest:day:uids',
|
||||
'digest:week:uids',
|
||||
'digest:month:uids',
|
||||
], uid, next);
|
||||
},
|
||||
function (next) {
|
||||
db.decrObjectField('global', 'userCount', next);
|
||||
},
|
||||
@@ -164,7 +182,10 @@ module.exports = function (User) {
|
||||
function (results, next) {
|
||||
db.deleteAll(['followers:' + uid, 'following:' + uid, 'user:' + uid], next);
|
||||
},
|
||||
], callback);
|
||||
], function (err) {
|
||||
delete deletesInProgress[uid];
|
||||
callback(err);
|
||||
});
|
||||
};
|
||||
|
||||
function deleteVotes(uid, callback) {
|
||||
|
||||
Reference in New Issue
Block a user