@defra/wls-eps-web-service
Version:
The web service for wildlife licencing of European Protected Species
63 lines (58 loc) • 2.7 kB
JavaScript
import { APIRequests } from '../../../../services/api-requests.js'
import { contactOperations } from '../operations.js'
import { accountsRoute, contactsRoute } from '../common-handler.js'
import { boolFromYesNo, yesNoFromBool } from '../../../common/common.js'
export const getUserData = contactRole => async request => {
const journeyData = await request.cache().getData()
const { userId, applicationId } = journeyData
const user = await APIRequests.USER.getById(userId)
const contact = await APIRequests.CONTACT.role(contactRole).getByApplicationId(applicationId)
return Object.assign(user, { yesNo: contact ? yesNoFromBool(contact.userId === user.id) : null })
}
const mostRecent = (a, b) => Date.parse(b.updatedAt) - Date.parse(a.updatedAt)
export const setUserData = contactRole => async request => {
const { userId, applicationId } = await request.cache().getData()
const contactOps = contactOperations(contactRole, applicationId, userId)
if (boolFromYesNo(request.payload['yes-no'])) {
const contacts = await APIRequests.CONTACT.findAllByUser(userId)
const [userContact] = contacts.filter(c => c.userId === userId).sort(mostRecent)
if (userContact) {
await contactOps.assign(userContact.id)
await contactOps.setContactIsUser(true)
} else {
await contactOps.unAssign()
await contactOps.create(true)
}
} else {
await contactOps.unAssign()
}
}
/**
* When searching for roles, additional secondary roles may be included in the search,
* e.g. the ecologist and the alternative ecologist.
* @param contactRole
* @param additionalContactRoles
* @param accountRole
* @param urlBase
* @returns {(function(*): Promise<string|*>)|*}
*/
export const userCompletion = (contactRole, additionalContactRoles, accountRole, urlBase) => async request => {
const pageData = await request.cache().getPageData()
const { userId, applicationId } = await request.cache().getData()
if (boolFromYesNo(pageData.payload['yes-no'])) {
const contact = await APIRequests.CONTACT.role(contactRole).getByApplicationId(applicationId)
const immutable = await APIRequests.CONTACT.isImmutable(applicationId, contact.id)
if (immutable) {
// Contact is immutable, go to accounts
return accountsRoute(accountRole, [], userId, applicationId, urlBase)
} else {
// Contact is new, gather name, or already set, skip
return contact.fullName
? accountsRoute(accountRole, [], userId, applicationId, urlBase)
: urlBase.NAME.uri
}
} else {
// Filter out any owner by user, and any clones
return contactsRoute(userId, applicationId, contactRole, additionalContactRoles, urlBase)
}
}