@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
JavaScript
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