From 576315abdc74cee1d63435ce1c389f5b830819b8 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Wed, 19 Aug 2015 13:05:53 -0700 Subject: [PATCH] fix current streak, longest streak still broken --- server/boot/user.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/server/boot/user.js b/server/boot/user.js index be063d47e1..3ae9d9ac37 100644 --- a/server/boot/user.js +++ b/server/boot/user.js @@ -4,24 +4,33 @@ var _ = require('lodash'), debug = require('debug')('freecc:cntr:userController'); +const daysBetween = 1.5; + function calcCurrentStreak(cals) { const revCals = cals.slice().reverse(); let streakBroken = false; - return revCals + const lastDayInStreak = revCals .reduce((current, cal, index) => { - // if streak not borken and diff between this cal and the call after it - // is equal to zero - // moment.diff will return the days between rounded down + const before = revCals[index === 0 ? 0 : index - 1]; if ( !streakBroken && - moment(revCals[index === 0 ? 0 : index - 1]).diff(cal, 'days') === 0 + moment(before).diff(cal, 'days', true) < daysBetween ) { - return current + 1; + return index; } - return 1; - }, 1); + return current; + }, 0); + + const lastTimestamp = revCals[lastDayInStreak]; + return Math.ceil(moment().diff(lastTimestamp, 'days', true)); } +// TODO(berks): calc longest streak +/* +function longestStreak(cals) { +} +*/ + module.exports = function(app) { var router = app.loopback.Router(); var User = app.models.User; @@ -129,9 +138,7 @@ module.exports = function(app) { objOrNum : objOrNum.timestamp; }) - .map(time => { - return moment(time).format('YYYY-MM-DD'); - }); + .sort(); user.currentStreak = calcCurrentStreak(cals); @@ -146,6 +153,9 @@ module.exports = function(app) { objOrNum : objOrNum.timestamp; }) + .filter((timestamp) => { + return !!timestamp; + }) .reduce((data, timeStamp) => { data[(timeStamp / 1000)] = 1; return data;