change user delete so it returns quickly

This commit is contained in:
Barış Soner Uşaklı
2018-10-03 19:12:46 -04:00
parent 5e6da27a6a
commit f77091d1ed
4 changed files with 85 additions and 68 deletions

View File

@@ -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) {