Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

join.js 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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. payload: Joi.object({
  11. profile_id: Joi.number().required(),
  12. target_id: Joi.number().allow(null),
  13. grouping_id: Joi.number().allow(null),
  14. grouping_name: Joi.string().allow(null),
  15. grouping_type: Joi.string().allow(null),
  16. role: Joi.string(),
  17. }),
  18. }
  19. const responseSchemas = {
  20. response: Joi.object({
  21. memberships: Joi.array().items(),
  22. hasMatch: Joi.boolean()
  23. }),
  24. error: Joi.object({
  25. error: Joi.string(),
  26. }),
  27. }
  28. module.exports = {
  29. method: 'POST',
  30. path: '/join',
  31. options: {
  32. ...pluginConfig.docs,
  33. tags: ['api'],
  34. auth: false,
  35. /**
  36. * Join a grouping by creating a membership record
  37. * @param {*} request
  38. * @param {*} h
  39. * @returns {object}
  40. */
  41. handler: async function (request, h) {
  42. try {
  43. const { membershipService } = request.server.services()
  44. /** Grab payload info */
  45. const res = request.payload
  46. const groupingToWrite = {
  47. grouping_id: res.grouping_id,
  48. grouping_name: res.grouping_name,
  49. grouping_type: res.grouping_type,
  50. }
  51. /** Default to participant role */
  52. const role = res.role ? res.role : 'participant'
  53. console.log('---')
  54. /** User membership service method to create membership */
  55. const memberships = await membershipService.joinGrouping(
  56. res.profile_id,
  57. res.target_id,
  58. groupingToWrite,
  59. role,
  60. )
  61. console.log(memberships)
  62. return h
  63. .response({
  64. ok: true,
  65. handler: pluginConfig.handlerType,
  66. data: {
  67. memberships,
  68. hasMatch: memberships.every(
  69. membership => membership.is_active == true,
  70. ),
  71. },
  72. })
  73. .code(200)
  74. } catch (err) {
  75. return h
  76. .response({
  77. ok: false,
  78. handler: pluginConfig.handlerType,
  79. data: { error: `${err}` },
  80. })
  81. .code(409)
  82. }
  83. },
  84. /** Validate based on validators object */
  85. validate: {
  86. ...validators,
  87. failAction: 'log'
  88. },
  89. /** Validate the server response */
  90. response: {
  91. status: {
  92. 200: Joi.object({
  93. ok: Joi.bool(),
  94. handler: Joi.string(),
  95. data: responseSchemas.response,
  96. }),
  97. 409: Joi.object({
  98. ok: Joi.bool(),
  99. handler: Joi.string(),
  100. data: responseSchemas.error,
  101. }),
  102. },
  103. },
  104. },
  105. }