'use strict' const Joi = require('joi') const apiSchema = require('../../schemas/api') const errorSchema = require('../../schemas/errors') const profileSchema = require('../../schemas/profiles') const params = require('../../schemas/params') const pluginConfig = { handlerType: 'profile', docs: { description: 'Updates match queue in place', notes: 'Updates in place and does not delete from table', }, } const responseSchemas = { response: Joi.array().items( Joi.alternatives().try(Joi.number().optional(), profileSchema.single), ), error: errorSchema.single, } const validators = { params: params.profileId.append({ target_id: Joi.number() }), query: params.profileInclude.append({ reinsert: Joi.boolean() }), } module.exports = { method: 'PATCH', path: '/{profile_id}/queue/{target_id}/delete', options: { ...pluginConfig.docs, tags: ['api'], /** Protect this route with authentication? */ auth: false, cors: true, handler: async function (request, h) { const { profile_id, target_id } = request.params const { include_profile, reinsert } = request.query const { profileService, matchQueueService } = request.server.services() const updatedQueue = await matchQueueService.markAsDeleted( profile_id, target_id, reinsert, ) const queueIds = updatedQueue.map(entry => entry.target_id) const res = { ok: true, handler: pluginConfig.handlerType, data: queueIds, } if (include_profile) { res.data = await profileService.getProfilesFor(queueIds) } try { return h.response(res).code(200) } catch (err) { return h .response({ ok: false, handler: pluginConfig.handlerType, data: { error: `${err}` }, }) .code(409) } }, /** Validate based on validators object */ validate: { ...validators, failAction: 'log', }, /** Validate the server response */ response: { status: { 200: apiSchema.single .append({ data: responseSchemas.response, }) .label('match_queue_res'), 409: apiSchema.single .append({ data: responseSchemas.error, }) .label('error_single_res'), }, }, }, }