@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
65 lines (58 loc) • 1.96 kB
text/typescript
import { RequestHandler } from 'express'
import { Services } from '../../../../types/Services'
import AsyncPollingUtils from './utils'
import AsyncRequestUtils from '../filters/utils'
import AsyncRequestListUtils from '../../../../components/user-reports/requested/utils'
import ErrorSummaryUtils from '../../../../components/error-summary/utils'
export default class RequestStatusController {
layoutPath: string
services: Services
constructor(layoutPath: string, services: Services) {
this.layoutPath = layoutPath
this.services = services
}
// Render status page
GET: RequestHandler = async (req, res, next) => {
try {
const pollingRenderData = await AsyncPollingUtils.renderPolling({
req,
res,
services: this.services,
next,
})
res.render(`dpr/routes/journeys/request-report/status/view`, {
layoutPath: this.layoutPath,
...pollingRenderData,
})
} catch (error) {
req.body.title = 'Failed to retrieve report status'
req.body.errorDescription = 'We were unable to retrieve the report status:'
req.body.error = ErrorSummaryUtils.handleError(error)
next()
}
}
// Poll request status
POST: RequestHandler = async (req, res, next) => {
try {
const response = await AsyncRequestListUtils.getRequestStatus({ req, res, services: this.services })
res.send({ status: response.status })
} catch (error) {
res.send({ status: 'FAILED' })
}
}
DELETE: RequestHandler = async (req, res, next) => {
try {
await AsyncRequestUtils.cancelRequest({
req,
res,
services: this.services,
})
res.end()
} catch (error) {
req.body.title = 'Failed to abort request'
req.body.errorDescription = 'We were unable to abort the report request for the following reason:'
req.body.error = ErrorSummaryUtils.handleError(error)
next()
}
}
}