From 0210c033ee5504b474526aac0d5165091cbb7bdf Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 22 Oct 2015 16:59:25 -0400 Subject: [PATCH] closes #3779 --- src/favourites.js | 6 +++--- src/user/delete.js | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/favourites.js b/src/favourites.js index 137c47464e..c55702b433 100644 --- a/src/favourites.js +++ b/src/favourites.js @@ -26,13 +26,13 @@ var async = require('async'), var now = Date.now(); - if(type === 'upvote' && !unvote) { + if (type === 'upvote' && !unvote) { db.sortedSetAdd('uid:' + uid + ':upvote', now, pid); } else { db.sortedSetRemove('uid:' + uid + ':upvote', pid); } - if(type === 'upvote' || unvote) { + if (type === 'upvote' || unvote) { db.sortedSetRemove('uid:' + uid + ':downvote', pid); } else { db.sortedSetAdd('uid:' + uid + ':downvote', now, pid); @@ -213,7 +213,7 @@ var async = require('async'), if (voteStatus.upvoted && command === 'downvote' || voteStatus.downvoted && command === 'upvote') { // e.g. User *has* upvoted, and clicks downvote hook = command; - } else if (voteStatus.upvoted || voteStatus.downvoted) { // e.g. User *has* upvotes, clicks upvote (so we "unvote") + } else if (voteStatus.upvoted || voteStatus.downvoted) { // e.g. User *has* upvoted, clicks upvote (so we "unvote") hook = 'unvote'; } else { // e.g. User *has not* voted, clicks upvote hook = command; diff --git a/src/user/delete.js b/src/user/delete.js index bb7898b40a..778d270ecc 100644 --- a/src/user/delete.js +++ b/src/user/delete.js @@ -4,6 +4,7 @@ var async = require('async'), db = require('../database'), posts = require('../posts'), topics = require('../topics'), + favourites = require('../favourites'), groups = require('../groups'), plugins = require('../plugins'), batch = require('../batch'); @@ -21,12 +22,35 @@ 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); }