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.

53 lines (50 loc) 1.92 kB
import { getMyReport } from '../../routes/journeys/my-reports/utils.js'; import { captureDprError } from '../../utils/captureError.js'; import { getValues } from '../../utils/localsHelper.js'; import { evaluateAndUpdateReportStatus } from '../../utils/ReportStatus/getReportStatus.js'; const createReportPollingHandler = (services, renderFn) => async (req, res, _next) => { let requestedReport; try { const { executionId } = req.params; const { token, dprUser } = getValues(res); requestedReport = await getMyReport({ executionId }, 'requestedReports', services, dprUser.id); if (!requestedReport) { return res.sendStatus(404); } const { resolution, updated } = await evaluateAndUpdateReportStatus({ stored: requestedReport, services, token, res, }); if (resolution.type === 'NO_CHANGE' || !updated) { return res.sendStatus(204); } const { template, data } = renderFn(updated, resolution, req, res); return res.render(template, data, (err, html) => { if (err) return res.sendStatus(500); return res.type('text/html').send(html); }); } catch (error) { const message = 'Polling error'; const { executionId, reportId, id } = req.params; const meta = { reportId, id, executionId, ...(requestedReport ? { type: requestedReport.type, reportName: requestedReport.reportName, loadType: requestedReport.loadType, } : {}), }; captureDprError(error, message, meta); return res.sendStatus(500); } }; export { createReportPollingHandler }; //# sourceMappingURL=createReportPollingHandler.js.map