mirror of
https://github.com/alexbosworth/balanceofsatoshis.git
synced 2026-08-13 12:33:37 +02:00
56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
const moment = require('moment');
|
|
|
|
/** Sums for segment for a chart
|
|
|
|
{
|
|
[end_date]: <End Date ISO 8601 String>
|
|
measure: <Measure Time Period String>
|
|
records: [{
|
|
date: <Created At ISO 8601 Date String>
|
|
tokens: <Tokens To Sum Number>
|
|
}]
|
|
segments: <Segment Count Number>
|
|
}
|
|
|
|
@returns
|
|
{
|
|
count: [<Count In Segment Number>]
|
|
sum: [<Sum In Segment Number>]
|
|
}
|
|
*/
|
|
module.exports = ({end, measure, records, segments}) => {
|
|
const sums = [...Array(segments)].map((_, i) => {
|
|
const segment = moment(end).subtract(i, measure);
|
|
|
|
const segmentTotals = records.filter(record => {
|
|
const recordDate = moment(record.date);
|
|
|
|
if (segment.year() !== recordDate.year()) {
|
|
return false;
|
|
}
|
|
|
|
const isSameDay = segment.dayOfYear() === recordDate.dayOfYear();
|
|
|
|
switch (measure) {
|
|
case 'hour':
|
|
return isSameDay && segment.hour() === recordDate.hour();
|
|
|
|
case 'week':
|
|
return segment.week() === recordDate.week();
|
|
|
|
default:
|
|
return isSameDay;
|
|
}
|
|
});
|
|
|
|
return {
|
|
count: segmentTotals.reduce((sum, {}) => ++sum, Number()),
|
|
sum: segmentTotals.reduce((sum, {tokens}) => sum + tokens, Number()),
|
|
};
|
|
});
|
|
|
|
return {
|
|
count: sums.map(({count}) => count).slice().reverse(),
|
|
sum: sums.map(({sum}) => sum).slice().reverse(),
|
|
};
|
|
};
|