UNPKG

@defra/wls-eps-web-service

Version:

The web service for wildlife licencing of European Protected Species

93 lines (79 loc) 3.46 kB
import pageRoute from '../../routes/page-route.js' import { APPLICATION_LICENCE, EMAIL_CONFIRMATION, ReturnsURIs } from '../../uris.js' import { APIRequests } from '../../services/api-requests.js' import { timestampFormatter, timestampFormatterWithTime } from '../common/common.js' import { ContactRoles } from '../contact/common/contact-roles.js' import { addressLine } from '../service/address.js' import { cacheDirect } from '../../session-cache/cache-decorator.js' import Joi from 'joi' import { getApplicationData, licenceStatuses, checkData, findLatestLicenseAnnotation } from './application-common-functions.js' import { allCompletion } from '../returns/common-return-functions.js' export const getData = async request => { const { application, applicationType, applicationId, licences } = await getApplicationData(request, true) const sites = await APIRequests.SITE.findByApplicationId(applicationId) const siteAddress = sites.length > 0 ? addressLine(sites[0]) : '' const applicationLicence = licences.length > 0 ? licences[0] : [] Object.assign(application, { applicationType, siteAddress }) const applicant = await APIRequests.CONTACT.role(ContactRoles.APPLICANT).getByApplicationId(application.id) licences.forEach(licence => { Object.assign(licence, { lastSent: timestampFormatter(findLatestLicenseAnnotation(licence)?.modifiedOn) }) Object.assign(licence, { startDate: timestampFormatter(licence.startDate) }) Object.assign(licence, { endDate: timestampFormatter(licence.endDate) }) }) const lastSentEventFlag = licences.length > 0 && !!findLatestLicenseAnnotation(licences[0]) const lastLicenceReturn = await APIRequests.RETURNS.getLastLicenceReturn(applicationLicence.id) if (lastLicenceReturn) { lastLicenceReturn.createdAtFormatted = timestampFormatterWithTime(lastLicenceReturn.createdAt) } // Needed in the validator const journeyData = await request.cache().getData() journeyData.lastSentEventFlag = lastSentEventFlag journeyData.returns = lastLicenceReturn await request.cache().setData(journeyData) return { application, applicant, licenceStatuses, applicationLicence, lastSentEventFlag, lastLicenceReturn } } export const completion = async request => { const journeyData = await request.cache().getData() const pageData = request.payload['email-or-return'] if (pageData === 'email') { await APIRequests.LICENCES.queueTheLicenceEmailResend(journeyData?.applicationId) return EMAIL_CONFIRMATION.uri } const licences = await APIRequests.LICENCES.findActiveLicencesByApplicationId(journeyData?.applicationId) journeyData.licenceId = licences[0].id journeyData.licenceNumber = licences[0].licenceNumber // Start a new return if (pageData === 'return') { delete journeyData.returns await request.cache().setData(journeyData) return ReturnsURIs.NIL_RETURN.uri } await request.cache().setData(journeyData) return allCompletion(request) } export const validator = async (payload, context) => { const { lastSentEventFlag } = await cacheDirect(context).getData() if (lastSentEventFlag) { Joi.assert( payload, Joi.object({ 'email-or-return': Joi.any().required() }).options({ abortEarly: false, allowUnknown: true }) ) } } export default pageRoute({ page: APPLICATION_LICENCE.page, uri: APPLICATION_LICENCE.uri, validator, completion, checkData, getData })