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.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. 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, h) {
  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. /** Check if the grouping exists and if NOT creat it */
  45. const groupingId = await membershipService.findOrCreateGrouping(groupingToWrite)
  46. /** Default to participant role */
  47. const role = res.role ? res.role : 'participant'
  48. /** User membership service method to create membership */
  49. const membership = await membershipService.joinGrouping(res.user_id, groupingId, role)
  50. return {
  51. ok: true,
  52. handler: pluginConfig.handlerType,
  53. data: { membership }
  54. }
  55. }
  56. catch(err) {
  57. return {
  58. ok: false,
  59. handler: pluginConfig.handlerType,
  60. data: { error: `${err}` },
  61. }
  62. }
  63. },
  64. validate: validators.join,
  65. response: {
  66. schema: Joi.object({
  67. ok: Joi.bool(),
  68. handler: Joi.string(),
  69. data: Joi.object()
  70. }),
  71. failAction: 'log'
  72. }
  73. }
  74. }