UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

93 lines (92 loc) 3.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = routes; const utils_1 = __importDefault(require("../components/error-summary/utils")); const logger_1 = __importDefault(require("../utils/logger")); const localsHelper_1 = __importDefault(require("../utils/localsHelper")); const syncReportUtils_1 = __importDefault(require("../utils/report/syncReportUtils")); const UserReports_1 = require("../types/UserReports"); function routes({ router, services, layoutPath, prefix, }) { logger_1.default.info('Initialiasing routes: Sync reports'); const errorHandler = async (req, res) => { logger_1.default.error(`Error: ${JSON.stringify(req.body)}`); res.render(`dpr/views/async-error`, { layoutPath, ...req.body, ...req.params, error: req.body.error, params: req.params, }); }; const viewSyncReportHandler = async (req, res, next) => { try { const renderData = await syncReportUtils_1.default.getReport({ req, res, services }); res.render(`dpr/views/report`, { layoutPath, ...renderData, }); } catch (error) { req.body.title = `Report Failed`; req.body.errorDescription = 'We were unable to show this report for the following reason:'; req.body.error = utils_1.default.handleError(error); next(); } }; const syncReportLoadingHandler = async (req, res, next) => { try { const { token } = localsHelper_1.default.getValues(res); const { reportId, id } = req.params; const { dataProductDefinitionsPath } = req.query; const definition = await services.reportingService.getDefinition(token, reportId, id, dataProductDefinitionsPath); const { name: reportName, variant, description: reportDescription } = definition; const { classification, description, name } = variant; res.render(`dpr/views/sync-load`, { renderData: { reportId, id, type: UserReports_1.ReportType.REPORT, reportName, name, classification, description: description || reportDescription, }, layoutPath, }); } catch (error) { next(); } }; const isAuthorisedToViewReport = async (req, res, next) => { const { token } = localsHelper_1.default.getValues(res); const { reportId, id, variantId, type } = req.params; const { dataProductDefinitionsPath } = req.query; let definition; if (type === UserReports_1.ReportType.REPORT) { definition = await services.reportingService.getDefinition(token, reportId, variantId || id, dataProductDefinitionsPath); } req.body.definition = definition; if ((definition === null || definition === void 0 ? void 0 : definition.authorised) !== undefined && !definition.authorised) { await unauthorisedReportHandler(req, res, next); } else { next(); } }; const unauthorisedReportHandler = async (req, res) => { res.render(`dpr/views/unauthorised-report`, { layoutPath, ...req.body, }); }; const viewReportPaths = [ `${prefix}/sync/:type/:reportId/:id/report`, `${prefix}/sync/:type/:reportId/:id/report/:download`, ]; router.get(viewReportPaths, isAuthorisedToViewReport, viewSyncReportHandler, errorHandler); router.get(`${prefix}/sync/:type/:reportId/:id/load-report`, isAuthorisedToViewReport, syncReportLoadingHandler); }