const _ = require('lodash') const app = require('./app') app.service('statistics', function(api) { const chart = ({ rows, seriesField, dataField, labelsField }) => { const labels = _.chain(rows).map(x => x[labelsField]).uniq().value() const series = _.chain(rows).map(x => x[seriesField]).uniq().value() const seriesData = _.chain(rows) .groupBy(x => x[seriesField]) .toPairs() .map(([key, rows]) => [ key, _.chain(rows) .map(row => [row[labelsField], row[dataField]]) .fromPairs() .value() ]) .fromPairs() .value() data = series.map(s => { const sdata = seriesData[s] return labels.map(l => sdata[l]) }) return {labels, series, data} } this.efficiency = async () => { const rows = await api.statistics() return { delivery: chart({ rows, seriesField: 'key', dataField: 'delivered', labelsField: 'date' }), efficiency: chart({ rows, seriesField: 'key', dataField: 'efficiency', labelsField: 'date' }) } } })