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.

join.js 2.5KB

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