You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. 'use strict';
  2. const Joi = require('joi');
  3. const pluginConfig = {
  4. handlerType: 'grouping',
  5. docs: {
  6. description: 'join',
  7. notes: 'Join a grouping by creating a membership record'
  8. }
  9. }
  10. const validators = {
  11. join: {
  12. payload: Joi.object({
  13. user_id: Joi.number().required(),
  14. target_id: Joi.number().allow(null),
  15. grouping_id: Joi.number().allow(null),
  16. grouping_name: Joi.string().allow(null),
  17. grouping_type: Joi.string().allow(null),
  18. role: Joi.string(),
  19. })
  20. }
  21. }
  22. module.exports = {
  23. method: 'POST',
  24. path: '/join',
  25. options: {
  26. ...pluginConfig.docs,
  27. tags: ['api'],
  28. auth: false,
  29. /**
  30. * Join a grouping by creating a membership record
  31. * @param {*} request
  32. * @param {*} h
  33. * @returns {object}
  34. */
  35. handler: async function (request, h) {
  36. try {
  37. const { membershipService } = request.services()
  38. /** Grab payload info */
  39. const res = request.payload
  40. const groupingToWrite = {
  41. grouping_id: res.grouping_id,
  42. grouping_name: res.grouping_name,
  43. grouping_type: res.grouping_type
  44. }
  45. /** Default to participant role */
  46. const role = res.role ? res.role : 'participant'
  47. /** User membership service method to create membership */
  48. const memberships = await membershipService.joinGrouping(res.user_id, res.target_id, groupingToWrite, role)
  49. return {
  50. ok: true,
  51. handler: pluginConfig.handlerType,
  52. data: { memberships, hasMatch: memberships.every(membership => membership.is_active == true) }
  53. }
  54. }
  55. catch(err) {
  56. return {
  57. ok: false,
  58. handler: pluginConfig.handlerType,
  59. data: { error: `${err}` },
  60. }
  61. }
  62. },
  63. validate: validators.join,
  64. response: {
  65. schema: Joi.object({
  66. ok: Joi.bool(),
  67. handler: Joi.string(),
  68. data: Joi.object()
  69. }),
  70. failAction: 'log'
  71. }
  72. }
  73. }