'use strict'; 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, h) { 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' } } }