UNPKG

@defra/wls-eps-api

Version:

The API to support the wildlife licencing of European Protected Species

61 lines (54 loc) 1.89 kB
/* * 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) } }