const Report = require('../core/report'); module.exports = app => { app.get(`/api/report/:name`, async(req, res, next) => { try { const reportName = req.params.name; const fileName = getFileName(reportName, req.args); const report = new Report(reportName, req.args); if (req.args.preview) { const template = await report.render(); res.send(template); } else { const stream = await report.toPdfStream(); res.setHeader('Content-type', 'application/pdf'); res.setHeader('Content-Disposition', `inline; filename="${fileName}"`); res.end(stream); } } catch (error) { next(error); } }); /** * Returns all the params that ends with id * @param {object} args - Params object * * @return {array} List of identifiers */ function getIdentifiers(args) { const identifiers = []; const keys = Object.keys(args); for (let arg of keys) { if (arg.endsWith('Id')) identifiers.push(arg); } return identifiers; } function getFileName(name, args) { const identifiers = getIdentifiers(args); const params = []; params.push(name); for (let id of identifiers) params.push(args[id]); const fileName = params.join('_'); return `${fileName}.pdf`; } };