const Joi = require('joi') const pluginConfig = { handlerType: 'grouping', docs: { description: 'join', notes: 'Join a grouping by creating a membership record', }, } const validators = { join: { payload: Joi.object({ user_id: Joi.number().required(), target_id: Joi.number().allow(null), grouping_id: Joi.number().allow(null), grouping_name: Joi.string().allow(null), grouping_type: Joi.string().allow(null), role: Joi.string(), }), }, } module.exports = { method: 'POST', path: '/join', options: { ...pluginConfig.docs, tags: ['api'], auth: false, /** * Join a grouping by creating a membership record * @param {*} request * @param {*} h * @returns {object} */ handler: async function (request) { try { const { membershipService } = request.services() /** Grab payload info */ const res = request.payload const groupingToWrite = { grouping_id: res.grouping_id, grouping_name: res.grouping_name, grouping_type: res.grouping_type, } /** Default to participant role */ const role = res.role ? res.role : 'participant' /** User membership service method to create membership */ const memberships = await membershipService.joinGrouping( res.user_id, res.target_id, groupingToWrite, role, ) return { ok: true, handler: pluginConfig.handlerType, data: { memberships, hasMatch: memberships.every( membership => membership.is_active == true, ), }, } } catch (err) { return { ok: false, handler: pluginConfig.handlerType, data: { error: `${err}` }, } } }, validate: validators.join, response: { schema: Joi.object({ ok: Joi.bool(), handler: Joi.string(), data: Joi.object(), }), failAction: 'log', }, }, }