@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
66 lines (54 loc) • 1.9 kB
text/typescript
/* eslint-disable no-param-reassign */
import { Router } from 'express'
import { Services } from '../../../types/Services'
import RequestReportController from './controller'
// Routes
import requestReportRoutes from './filters/routes'
import requestStatusRoutes from './status/routes'
// middleware
import reportAuthoriser from '../../../middleware/reportAuthoriser'
export function Routes({ layoutPath, services }: { services: Services; layoutPath: string }) {
const router = Router({ mergeParams: true })
const controller = new RequestReportController(layoutPath, services)
router.use(
`/:type/:reportId/:id/filters`,
reportAuthoriser(services, layoutPath),
requestReportRoutes({ layoutPath, services }),
controller.errorHandler,
)
router.use(
`/:type/:reportId/:id/:executionId/status`,
reportAuthoriser(services, layoutPath),
requestStatusRoutes({ layoutPath, services }),
controller.errorHandler,
)
return router
}
export function Redirects() {
const router = Router({ mergeParams: true })
// Request route redirect
router.get(`/async/:type/:reportId/:id/request`, (req, res) => {
const { type, reportId, id } = req.params
res.redirect(`${res.locals.nestedBaseUrl}/dpr/request-report/${type}/${reportId}/${id}/filters`)
})
// Status route redirect
router.get(`/async/:type/:reportId/:id/request/:executionId`, (req, res) => {
const { type, reportId, id, executionId } = req.params
res.redirect(`${res.locals.nestedBaseUrl}/dpr/request-report/${type}/${reportId}/${id}/${executionId}/status`)
})
return router
}
export const RequestReportRoutes = ({
services,
path,
layoutPath,
}: {
services: Services
path: string
layoutPath: string
}) => {
const router = Router({ mergeParams: true })
router.use(path, Routes({ services, layoutPath }))
router.use('/', Redirects())
return router
}