From 133f17968e5545f70b933049202bf979f0301f5d Mon Sep 17 00:00:00 2001 From: Zak <57547218+madebyzak@users.noreply.github.com> Date: Wed, 12 Feb 2025 11:19:53 +0000 Subject: [PATCH] RA-263: create view application route (#22) * create view application route * handle errors gracefully --- server/routes/applications/index.ts | 2 + .../applications/viewApplicationsRoutes.ts | 45 +++++++++++++++++++ server/services/auditService.ts | 3 +- .../swap-visiting-orders-for-pin-credit.njk | 20 +++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 server/routes/applications/viewApplicationsRoutes.ts create mode 100644 server/views/pages/view-application/swap-visiting-orders-for-pin-credit.njk diff --git a/server/routes/applications/index.ts b/server/routes/applications/index.ts index 4b9041f..70a8d39 100644 --- a/server/routes/applications/index.ts +++ b/server/routes/applications/index.ts @@ -4,6 +4,7 @@ import AuditService, { Page } from '../../services/auditService' import applicationTypeRoutes from './applicationTypeRoutes' import prisonerDetailsRoutes from './prisonerDetailsRoutes' import swapVosPinCreditDetailsRoutes from './swapVosPinCreditDetailsRoutes' +import viewApplicationRoutes from './viewApplicationsRoutes' export default function applicationsRoutes({ auditService }: { auditService: AuditService }): Router { const router = Router() @@ -52,6 +53,7 @@ export default function applicationsRoutes({ auditService }: { auditService: Aud router.use(applicationTypeRoutes({ auditService })) router.use(prisonerDetailsRoutes({ auditService })) router.use(swapVosPinCreditDetailsRoutes({ auditService })) + router.use(viewApplicationRoutes({ auditService })) return router } diff --git a/server/routes/applications/viewApplicationsRoutes.ts b/server/routes/applications/viewApplicationsRoutes.ts new file mode 100644 index 0000000..2dd9f2b --- /dev/null +++ b/server/routes/applications/viewApplicationsRoutes.ts @@ -0,0 +1,45 @@ +import { Request, Response, Router } from 'express' +import { APPLICATION_TYPES } from '../../constants/applicationTypes' +import asyncMiddleware from '../../middleware/asyncMiddleware' +import AuditService, { Page } from '../../services/auditService' + +export default function viewApplicationRoutes({ auditService }: { auditService: AuditService }): Router { + const router = Router() + + router.get( + '/view/:applicationId', + asyncMiddleware(async (req: Request, res: Response) => { + const { applicationId } = req.params + + const application = { + id: applicationId, + type: 'swap-visiting-orders-for-pin-credit', + dept: 'Business Hub', + } + + if (!application) { + res.redirect('/applications') + return + } + + await auditService.logPageView(Page.VIEW_APPLICATION_PAGE, { + who: res.locals.user.username, + correlationId: req.id, + }) + + const applicationType = APPLICATION_TYPES.find(type => type.value === application.type) + + if (!applicationType) { + res.redirect('/applications?error=unknown-type') + return + } + + res.render(`pages/view-application/${application.type}`, { + title: applicationType.name, + application, + }) + }), + ) + + return router +} diff --git a/server/services/auditService.ts b/server/services/auditService.ts index 1c9a1d1..fd91f7b 100644 --- a/server/services/auditService.ts +++ b/server/services/auditService.ts @@ -3,10 +3,11 @@ import HmppsAuditClient, { AuditEvent } from '../data/hmppsAuditClient' export enum Page { EXAMPLE_PAGE = 'EXAMPLE_PAGE', APPLICATIONS_PAGE = 'APPLICATIONS_PAGE', + CONFIRM_SWAP_VOS_PIN_CREDIT_DETAILS_PAGE = 'CONFIRM_SWAP_VOS_PIN_CREDIT_DETAILS_PAGE', LOG_APPLICATION_TYPE_PAGE = 'LOG_APPLICATION_TYPE_PAGE', LOG_PRISONER_DETAILS_PAGE = 'LOG_PRISONER_DETAILS_PAGE', LOG_SWAP_VOS_PIN_CREDIT_DETAILS_PAGE = 'LOG_SWAP_VOS_PIN_CREDIT_DETAILS_PAGE', - CONFIRM_SWAP_VOS_PIN_CREDIT_DETAILS_PAGE = 'CONFIRM_SWAP_VOS_PIN_CREDIT_DETAILS_PAGE', + VIEW_APPLICATION_PAGE = 'VIEW_APPLICATION_PAGE', } export interface PageViewEventDetails { diff --git a/server/views/pages/view-application/swap-visiting-orders-for-pin-credit.njk b/server/views/pages/view-application/swap-visiting-orders-for-pin-credit.njk new file mode 100644 index 0000000..425beed --- /dev/null +++ b/server/views/pages/view-application/swap-visiting-orders-for-pin-credit.njk @@ -0,0 +1,20 @@ +{% from "govuk/components/back-link/macro.njk" import govukBackLink %} +{% from "govuk/components/button/macro.njk" import govukButton %} +{% from "govuk/components/summary-list/macro.njk" import govukSummaryList %} + +{% extends "../../partials/layout.njk" %} + +{% set pageTitle = applicationName + " - " + title %} +{% set mainClasses = "app-container govuk-body applications-landing-page" %} + +{% block content %} +