balanceofsatoshis
Version:
Lightning balance CLI
57 lines (45 loc) • 1.36 kB
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(),
};
};