From a70e7599abec7f58f85e8d25f1f4d045743c3bba Mon Sep 17 00:00:00 2001 From: Tyler Renelle Date: Sun, 11 Aug 2013 19:56:22 -0400 Subject: [PATCH] very weird fix. batchTxn() pass in option to skip hydration, which sometimes achieves exactly the effect *hydrating* is supposed to achieve. very strange, but anyway this fixes the habit scoring --- src/app/misc.coffee | 15 +++++++++------ src/server/api.coffee | 4 ++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/app/misc.coffee b/src/app/misc.coffee index 2529ddb1df..83c7489935 100644 --- a/src/app/misc.coffee +++ b/src/app/misc.coffee @@ -3,23 +3,26 @@ algos = require 'habitrpg-shared/script/algos' items = require('habitrpg-shared/script/items').items helpers = require('habitrpg-shared/script/helpers') -module.exports.batchTxn = batchTxn = (model, cb, options) -> - user = options?.user or model.at("_user") - uObj = helpers.hydrate(user.get()) # see https://github.com/codeparty/racer/issues/116 +module.exports.batchTxn = batchTxn = (model, cb, options={}) -> + _.defaults options, {user: model.at("_user"), hydrate: true, cron: false, done: ->} + {user} = options + # see https://github.com/codeparty/racer/issues/116 + # But sometimes we get the exact opposite effect if we hydrate. I don't understand it, and I can't wait to start using Mongoose instead. + uObj = if options.hydrate then helpers.hydrate(user.get()) else user.get() batch = set: (k,v) -> helpers.dotSet(k,v,uObj); paths[k] = true get: (k) -> helpers.dotGet(k,uObj) paths = {} model._dontPersist = true ret = cb uObj, paths, batch - _.each paths, (v,k) -> user.pass({cron:options?.cron}).set(k,batch.get(k));true + _.each paths, (v,k) -> user.pass({cron:options.cron}).set(k,batch.get(k));true model._dontPersist = false # some hackery in our own branched racer-db-mongo, see findAndModify of lefnire/racer-db-mongo#habitrpg index.js # pass true if we have levelled to supress xp notification unless _.isEmpty paths setOps = _.reduce paths, ((m,v,k)-> m[k] = batch.get(k);m), {} - user.set "update__", setOps, options?.done - else options?.done?() + user.set "update__", setOps, options.done + else options.done() ret #TODO put this in habitrpg-shared diff --git a/src/server/api.coffee b/src/server/api.coffee index 632cff99fd..c17f0aa2a0 100644 --- a/src/server/api.coffee +++ b/src/server/api.coffee @@ -58,12 +58,12 @@ deleteTask = (user, task, cb) -> taskIds = user.get "#{task.type}Ids" user.remove "#{task.type}Ids", taskIds.indexOf(task.id), 1, cb -score = (model, user, taskId, direction, cb) -> +score = (model, user, taskId, direction, done) -> delta = 0 misc.batchTxn model, (uObj, paths) -> tObj = uObj.tasks[taskId] delta = algos.score(uObj, tObj, direction, {paths}) - , {user, done:cb} + , {user, done, hydrate: false} delta ###