diff --git a/common/script/preenUserHistory.js b/common/script/preenUserHistory.js index dc0e68dc4c..babec300be 100644 --- a/common/script/preenUserHistory.js +++ b/common/script/preenUserHistory.js @@ -50,8 +50,8 @@ export function preenHistory (history, isSubscribed, timezoneOffset) { return date.isSame(monthsCutOff) || date.isAfter(monthsCutOff); }); // Aggregate remaining entries by month and year - newHistory.unshift(..._aggregate(aggregateByMonth, 'YYYYMM')); - newHistory.unshift(..._aggregate(history, 'YYYY')); + if (history.length > 0) newHistory.unshift(..._aggregate(aggregateByMonth, 'YYYYMM')); + if (history.length > 0) newHistory.unshift(..._aggregate(history, 'YYYY')); return newHistory; } diff --git a/website/src/controllers/api-v2/user.js b/website/src/controllers/api-v2/user.js index d112bb2837..e0dab67ded 100644 --- a/website/src/controllers/api-v2/user.js +++ b/website/src/controllers/api-v2/user.js @@ -136,9 +136,23 @@ api.score = function(req, res, next) { t.value += delta; if (t.type == 'habit' || t.type == 'daily') { - t.history.push({value: t.value, date: +new Date}); + var tIndex = chal[`${t.type}s`].indexOf(t); + + // Add only one history entry per day + if (moment(t.history[t.history.length - 1].date).isSame(new Date, 'day')) { + t.history[t.history.length - 1] = { + value: t.value, + date: +(new Date), + }; + chal.markModified(`${t.type}s.${tIndex}.history`); + } else { + t.history.push({ + date: +(new Date), + value: t.value + }); + } + if (t.history.length > 365) { - var tIndex = chal[`${t.type}`].indexOf(t); t.history = shared.preenHistory(t.history, true); // true means the challenge will retain as much entries as a subscribed user chal.markModified(`${t.type}s.${tIndex}.history`); // Setting habits/dailys as modified because we don't know the index of the task }