@defra-fish/gafl-webapp-service
Version:
The websales frontend for the GAFL service
57 lines (48 loc) • 2.06 kB
JavaScript
import { IDENTIFY, NEW_TRANSACTION, AUTHENTICATE } from '../../../uri.js'
import pageRoute from '../../../routes/page-route.js'
import Joi from 'joi'
import { validation } from '@defra-fish/business-rules-lib'
import { addLanguageCodeToUri } from '../../../processors/uri-helper.js'
import GetDataRedirect from '../../../handlers/get-data-redirect.js'
import { dateOfBirthValidator, getDateErrorFlags } from '../../../schema/validators/validators.js'
export const getData = async request => {
// If we are supplied a permission number, validate it or throw 400
const permission = await request.cache().helpers.status.getCurrentPermission()
const page = await request.cache().helpers.page.getCurrentPermission(IDENTIFY.page)
if (permission.referenceNumber) {
const validatePermissionNumber = validation.permission
.permissionNumberUniqueComponentValidator(Joi)
.validate(permission.referenceNumber)
if (validatePermissionNumber.error) {
await request.cache().helpers.status.setCurrentPermission({ referenceNumber: null })
throw new GetDataRedirect(addLanguageCodeToUri(request, IDENTIFY.uri))
}
}
const pageData = {
referenceNumber: permission.referenceNumber,
uri: {
new: addLanguageCodeToUri(request, NEW_TRANSACTION.uri)
},
...getDateErrorFlags(page?.error)
}
if (page?.error) {
const [errorKey] = Object.keys(page.error)
const errorValue = page.error[errorKey]
pageData.error = { errorKey, errorValue }
}
return pageData
}
export const validator = payload => {
dateOfBirthValidator(payload)
Joi.assert(
{
postcode: payload.postcode,
referenceNumber: payload.referenceNumber
},
Joi.object({
referenceNumber: validation.permission.permissionNumberUniqueComponentValidator(Joi),
postcode: validation.contact.createOverseasPostcodeValidator(Joi)
}).options({ abortEarly: false })
)
}
export default pageRoute(IDENTIFY.page, IDENTIFY.uri, validator, request => addLanguageCodeToUri(request, AUTHENTICATE.uri), getData)