/************************************************************************* * * Troven CONFIDENTIAL * __________________ * * (c) 2017-2020 Troven Ventures Pty Ltd * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Troven Pty Ltd and its licensors, * if any. The intellectual and technical concepts contained * herein are proprietary to Troven Pty Ltd * and its suppliers and may be covered by International and Regional Patents, * patents in process, and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Troven Pty Ltd. */ import * as _ from "lodash"; import {IChassisMiddleware, IOperation} from "../interfaces"; /** * Sort-By * --------- * return the request as the response * * @type {{name: string, description: string, title: string, defaults: {path: string}, fn: module.exports.fn}} */ export default class echo implements IChassisMiddleware { name = "api.sortby"; title = "return the response, sorted by an Array of 'fields' and an optional 'order' Array [ASC, DESC]"; fn(operation: IOperation, _options: any): Function { false && operation; return function (req, res) { let options = _.extend({ fields: [], order:[] }, req.query, _options ); let sort_fields = options.fields; if (!sort_fields) sort_fields= req.query.fields.split(","); let sort_order = options.order; if (!sort_order) sort_order= req.query.order.split(","); let payload = req.json || req.body; let sorted = _.orderBy(payload, sort_fields, sort_order); res.status(200); res.send( sorted ); }; } };