@defra/wls-eps-api
Version:
The API to support the wildlife licencing of European Protected Species
61 lines (54 loc) • 1.89 kB
JavaScript
/*
* Create the application user object and return 201
*/
import { models } from '../../model/sequentelize-model.js'
import { APPLICATION_JSON } from '../../constants.js'
import { cache } from '../../services/cache.js'
import { clearCaches } from './application-cache.js'
import { prepareResponse } from './application-proc.js'
export default async (context, req, h) => {
try {
const { userId, applicationId } = context.request.params
const user = await models.users.findByPk(context.request.params.userId)
// Check the user exists
if (!user) {
return h.response().code(404)
}
await clearCaches(userId, applicationId)
const applicationPayload = (({ sddsId, ...l }) => l)(req.payload || {})
const [application, created] = await models.applications.findOrCreate({
where: { id: context.request.params.applicationId },
defaults: {
id: applicationId,
userId: userId,
sddsId: req.payload?.sddsId ?? null,
application: applicationPayload
}
})
if (created) {
const responseBody = prepareResponse(application.dataValues)
await cache.save(req.path, responseBody)
return h.response(responseBody)
.type(APPLICATION_JSON)
.code(201)
} else {
const [, updatedApplication] = await models.applications.update({
sddsId: req.payload?.sddsId ?? null,
application: applicationPayload
}, {
where: {
id: applicationId
},
returning: true
})
const responseBody = prepareResponse(updatedApplication[0].dataValues)
await cache.save(req.path, responseBody)
return h.response(responseBody)
.type(APPLICATION_JSON)
.code(200)
}
} catch (err) {
console.error('Error inserting into, or updating, the APPLICATIONS table', err)
throw new Error(err.message)
}
}