@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
JavaScript
;
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);
}