diff --git a/src/controllers/challenges.js b/src/controllers/challenges.js index eaf15b0bc9..148f105ced 100644 --- a/src/controllers/challenges.js +++ b/src/controllers/challenges.js @@ -366,7 +366,7 @@ function unlink(user, cid, keep, tid) { user.tasks[tid].challenge = {}; break; case 'remove': - user[user.tasks[tid].type+'s'].id(tid).remove(); + user.deleteTask(tid); break; case 'keep-all': _.each(user.tasks, function(t){ @@ -378,7 +378,7 @@ function unlink(user, cid, keep, tid) { case 'remove-all': _.each(user.tasks, function(t){ if (t.challenge && t.challenge.id == cid) { - user[t.type+'s'].id(t.id).remove(); + user.deleteTask(t.id); } }) break; diff --git a/src/controllers/user.js b/src/controllers/user.js index 4118b9fa47..69bf46bb89 100644 --- a/src/controllers/user.js +++ b/src/controllers/user.js @@ -64,11 +64,6 @@ api.verifyTaskExists = function(req, res, next) { return next(); }; -function deleteTask(user, task) { - var t = user[task.type+'s'].id(task.id); - if (t) t.remove(); -}; - function addTask(user, task) { task = helpers.taskDefaults(task); user[task.type+'s'].unshift(task); @@ -169,8 +164,9 @@ api.getTask = function(req, res, next) { * Delete Task */ api.deleteTask = function(req, res, next) { - deleteTask(res.locals.user, res.locals.task); - res.locals.user.save(function(err) { + var user = res.locals.user; + user.deleteTask(res.locals.task.id); + user.save(function(err) { if (err) return res.json(500, {err: err}); res.send(204); }); @@ -200,7 +196,7 @@ api.updateTasks = function(req, res, next) { if (task.id) { // delete if (task.del) { - deleteTask(user, task); + user.deleteTask(task.id); task = {deleted: true}; } else { // Update diff --git a/src/models/challenge.js b/src/models/challenge.js index 395a927240..1f17a553e0 100644 --- a/src/models/challenge.js +++ b/src/models/challenge.js @@ -39,11 +39,6 @@ ChallengeSchema.methods.toJSON = function(){ var doc = this.toObject(); doc.memberCount = doc.members ? _.size(doc.members) : doc.memberCount; // @see pre('save') comment above doc._isMember = this._isMember; - _.each(['habits','dailys','todos','rewards'], function(type){ - _.each(doc[type],function(task){ - task.id = task.id || task._id; - }) - }) return doc; } diff --git a/src/models/task.js b/src/models/task.js index efd4993c45..7311d81d17 100644 --- a/src/models/task.js +++ b/src/models/task.js @@ -13,8 +13,8 @@ var _ = require('lodash'); // ----------- var TaskSchema = new Schema({ - _id:{type: String,'default': helpers.uuid}, - id: String, + //_id:{type: String,'default': helpers.uuid}, + id: {type: String,'default': helpers.uuid}, history: Array, // [{date:Date, value:Number}], // this causes major performance problems text: String, date: Date, // due date for todos @@ -34,11 +34,8 @@ var TaskSchema = new Schema({ winner: String // user.profile.name // group: {type: 'Strign', ref: 'Group'} // if we restore this, rename `id` above to `challenge` } +},{ + _id: false }); -TaskSchema.pre('save', function(next){ - this.id = this.id || this._id; - next() -}) - module.exports.schema = TaskSchema; \ No newline at end of file diff --git a/src/models/user.js b/src/models/user.js index 697e3abe88..d97724dc53 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -201,6 +201,13 @@ var UserSchema = new Schema({ minimize: false // So empty objects are returned }); +UserSchema.methods.deleteTask = function(tid) { + //user[t.type+'s'].id(t.id).remove(); + var task = this.tasks[tid]; + var i = this[task.type+'s'].indexOf(task); + if (~i) this[task.type+'s'].splice(i,1); +} + UserSchema.methods.toJSON = function() { var doc = this.toObject(); doc.id = doc._id; @@ -209,12 +216,6 @@ UserSchema.methods.toJSON = function() { doc.filters = {}; doc._tmp = this._tmp; // be sure to send down drop notifs - _.each(['habits','dailys','todos','rewards'], function(type){ - _.each(doc[type],function(task){ - task.id = task.id || task._id; - }) - }) - return doc; };