Skip to content

Commit

Permalink
feat: add support for facet key selection for reports
Browse files Browse the repository at this point in the history
  • Loading branch information
BenMaruchu committed Sep 19, 2019
1 parent 3e54038 commit a43dc0f
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 16 deletions.
40 changes: 34 additions & 6 deletions src/http.router.js
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@
*/

/* dependencies */
import { merge } from 'lodash';
import { compact, isEmpty, merge } from 'lodash';
import { Router } from '@lykmapipo/express-common';
import { getString } from '@lykmapipo/env';
import getOverviewReport from './reports/overview';
Expand Down Expand Up @@ -435,9 +435,13 @@ router.get(PATH_OVERVIEW, (request, response, next) => {

const filter = options.filter || {};

const facets = options.facets || [];
const { facets } = request.query;

const facetKeys = [].concat(facets);
let facetKeys = [];

if (!isEmpty(facets)) {
facetKeys = compact([].concat(facets.split(',')));
}

getOverviewReport(filter, facetKeys, (error, results) => {
if (error) {
Expand Down Expand Up @@ -471,7 +475,15 @@ router.get(PATH_PERFORMANCE, (request, response, next) => {

const filter = options.filter || {};

getPerformanceReport(filter, (error, results) => {
const { facets } = request.query;

let facetKeys = [];

if (!isEmpty(facets)) {
facetKeys = compact([].concat(facets.split(',')));
}

getPerformanceReport(filter, facetKeys, (error, results) => {
if (error) {
next(error);
} else {
Expand Down Expand Up @@ -505,7 +517,15 @@ router.get(PATH_OPERATOR_PERFORMANCE, (request, response, next) => {

const filter = options.filter || {};

getOperatorPerformanceReport(filter, (error, results) => {
const { facets } = request.query;

let facetKeys = [];

if (!isEmpty(facets)) {
facetKeys = compact([].concat(facets.split(',')));
}

getOperatorPerformanceReport(filter, facetKeys, (error, results) => {
if (error) {
next(error);
} else {
Expand Down Expand Up @@ -537,7 +557,15 @@ router.get(PATH_OPERATIONAL, (request, response, next) => {

const filter = options.filter || {};

getOperationalReport(filter, (error, results) => {
const { facets } = request.query;

let facetKeys = [];

if (!isEmpty(facets)) {
facetKeys = compact([].concat(facets.split(',')));
}

getOperationalReport(filter, facetKeys, (error, results) => {
if (error) {
next(error);
} else {
Expand Down
10 changes: 7 additions & 3 deletions src/reports/operational.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

/* dependencies */
import getBaseAggregation from '../base/servicerequest.base';
import { getFacet } from '../util';
import { OVERALL_FACET, SERVICE_FACET } from '../base/facets';

const OPERATIONAL_FACET = {
Expand All @@ -32,21 +33,24 @@ const OPERATIONAL_FACET = {
* @description Generate operational report based on provided criteria
*
* @param {object} criteria Criteria condition to be applied in $match
* @param {string[]} facetKeys Contain list of facets key to be used to generate report
* @param {object} onResults Callback when aggregation operation finishes
* @returns {object} executed aggregation
*
* @version 0.1.0
* @version 0.2.0
* @since 0.1.0
*
* @example
* getOperationalReport(criteria, function(error, data){
* ...
* });
*/
const getOperationalReport = (criteria, onResults) => {
const getOperationalReport = (criteria, facetKeys, onResults) => {
const baseAggregation = getBaseAggregation(criteria);

return baseAggregation.facet(OPERATIONAL_FACET).exec(onResults);
const FACET = getFacet(OPERATIONAL_FACET, facetKeys);

return baseAggregation.facet(FACET).exec(onResults);
};

export default getOperationalReport;
10 changes: 7 additions & 3 deletions src/reports/operator.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

/* dependencies */
import getBaseAggregation from '../base/servicerequest.base';
import { getFacet } from '../util';
import { OVERALL_FACET, SERVICE_FACET } from '../base/facets';

const OPERATOR_PERFORMANCE_FACET = {
Expand All @@ -28,21 +29,24 @@ const OPERATOR_PERFORMANCE_FACET = {
* @description Generate operator performance report based on provided criteria
*
* @param {object} criteria Criteria condition to be applied in $match
* @param {string[]} facetKeys Contain list of facets key to be used to generate report
* @param {object} onResults Callback when aggregation operation finishes
* @returns {object} executed aggregation
*
* @version 0.1.0
* @version 0.2.0
* @since 0.1.0
*
* @example
* getOperatorPerformanceReport(criteria, function(error, data){
* ...
* });
*/
const getOperatorPerformanceReport = (criteria, onResults) => {
const getOperatorPerformanceReport = (criteria, facetKeys, onResults) => {
const baseAggregation = getBaseAggregation(criteria);

return baseAggregation.facet(OPERATOR_PERFORMANCE_FACET).exec(onResults);
const FACET = getFacet(OPERATOR_PERFORMANCE_FACET, facetKeys);

return baseAggregation.facet(FACET).exec(onResults);
};

export default getOperatorPerformanceReport;
2 changes: 1 addition & 1 deletion src/reports/overview.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ const OVERVIEW_FACET = {
* @param {object} onResults Callback when aggregation operation finishes
* @returns {object} executed aggregation
*
* @version 0.1.0
* @version 0.2.0
* @since 0.1.0
*
* @example
Expand Down
10 changes: 7 additions & 3 deletions src/reports/performance.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

/* dependencies */
import getBaseAggregation from '../base/servicerequest.base';
import { getFacet } from '../util';
import {
OVERALL_FACET,
STATUS_FACET,
Expand All @@ -44,21 +45,24 @@ const PERFORMANCE_FACET = {
* @description Generate performance report based on provided criteria
*
* @param {object} criteria Criteria condition to be applied in $match
* @param {string[]} facetKeys Contain list of facets key to be used to generate report
* @param {object} onResults Callback when aggregation operation finishes
* @returns {object} executed aggregation
*
* @version 0.1.0
* @version 0.2.0
* @since 0.1.0
*
* @example
* getPerformanceReport(criteria, function(error, data){
* ...
* });
*/
const getPerformanceReport = (criteria, onResults) => {
const getPerformanceReport = (criteria, facetKeys, onResults) => {
const baseAggregation = getBaseAggregation(criteria);

return baseAggregation.facet(PERFORMANCE_FACET).exec(onResults);
const FACET = getFacet(PERFORMANCE_FACET, facetKeys);

return baseAggregation.facet(FACET).exec(onResults);
};

export default getPerformanceReport;

0 comments on commit a43dc0f

Please sign in to comment.