UNPKG

@defra/wls-eps-web-service

Version:

The web service for wildlife licencing of European Protected Species

84 lines (72 loc) 3.46 kB
import Joi from 'joi' import pageRoute from '../../../../routes/page-route.js' import { habitatURIs } from '../../../../uris.js' import { PowerPlatformKeys } from '@defra/wls-powerapps-keys' import { APIRequests } from '../../../../services/api-requests.js' import { getHabitatById } from '../common/get-habitat-by-id.js' import { putHabitatById } from '../common/put-habitat-by-id.js' import { checkApplication } from '../../../common/check-application.js' import { isCompleteOrConfirmed } from '../../../common/tag-functions.js' import { tagStatus } from '../../../../services/status-tags.js' import { A24_SETT } from '../../../tasklist/a24-badger-licence.js' const { METHOD_IDS: { OBSTRUCT_SETT_WITH_GATES, OBSTRUCT_SETT_WITH_BLOCK_OR_PROOF, DAMAGE_A_SETT, DESTROY_A_SETT, DISTURB_A_SETT } } = PowerPlatformKeys const { SPECIES: { BADGER }, SPECIES_SUBJECT: { BADGER: BADGER_SUBJECT }, ACTIVITY_ID: { INTERFERE_WITH_BADGER_SETT } } = PowerPlatformKeys export const completion = async _request => habitatURIs.CHECK_YOUR_ANSWERS.uri export const getData = async request => { const journeyData = await request.cache().getData() let methodIds = journeyData?.habitatData?.methodIds || [] if (!methodIds.length && request.query.id) { // If we're revisiting the page then `request.query.id` will be the sett id; so if we had no cached habitat data // we can use this to retrieve the habitat site's methods const habitatSite = await APIRequests.HABITAT.getHabitatBySettId(journeyData.applicationId, request.query.id) methodIds = habitatSite.methodIds } return { OBSTRUCT_SETT_WITH_GATES, OBSTRUCT_SETT_WITH_BLOCK_OR_PROOF, DAMAGE_A_SETT, DESTROY_A_SETT, DISTURB_A_SETT, methodIds } } export const setData = async request => { const pageData = await request.cache().getPageData() const journeyData = await request.cache().getData() const tagState = await APIRequests.APPLICATION.tags(journeyData.applicationId).get(A24_SETT) const methodIds = [].concat(pageData.payload[habitatURIs.ACTIVITIES.page]) if (isCompleteOrConfirmed(tagState)) { Object.assign(journeyData, { redirectId: request.query.id }) const newSett = await getHabitatById(journeyData, journeyData.redirectId) Object.assign(journeyData.habitatData, { methodIds }) await putHabitatById(newSett) } else { const speciesId = BADGER const activityId = INTERFERE_WITH_BADGER_SETT const speciesSubjectId = BADGER_SUBJECT Object.assign(journeyData.habitatData, { methodIds, speciesId, speciesSubjectId, activityId }) await APIRequests.HABITAT.create(journeyData.applicationId, journeyData.habitatData) await APIRequests.APPLICATION.tags(journeyData.applicationId).set({ tag: A24_SETT, tagState: tagStatus.COMPLETE_NOT_CONFIRMED }) } await request.cache().setData(journeyData) } export const validator = async payload => { if (!payload[habitatURIs.ACTIVITIES.page]) { throw new Joi.ValidationError('ValidationError', [{ message: 'Error: no way of affecting the sett has been selected', path: [habitatURIs.ACTIVITIES.page], type: 'no-checkbox-selected', context: { label: habitatURIs.ACTIVITIES.page, value: 'Error', key: habitatURIs.ACTIVITIES.page } }], null) } } export default pageRoute({ page: habitatURIs.ACTIVITIES.page, uri: habitatURIs.ACTIVITIES.uri, checkData: checkApplication, validator, completion, getData, setData })