const Joi = require('joi'); const controller = require('../controllers/publicEngagement.controller'); const profilePayload = Joi.object({ name: Joi.string().allow('').max(120), firstName: Joi.string().allow('').max(80), lastName: Joi.string().allow('').max(80), displayName: Joi.string().allow('').max(120), email: Joi.string().allow('').max(160), customFields: Joi.object().unknown(true), }).min(1); const progressPayload = Joi.object({ step: Joi.string().valid('setup', 'aiAvatar', 'socialShare').required(), url: Joi.string().allow('').max(2000), }); const mediaPayload = Joi.object({ kind: Joi.string().valid('dp', 'aiAvatar', 'socialShare', 'photoWall').required(), url: Joi.string().required().max(2000), sourceUrl: Joi.string().allow('').max(2000), }); const wallPayload = Joi.object({ url: Joi.string().required().max(2000), }); module.exports = [ { method: 'GET', path: '/api/public/engagement/{eventId}/participants/{participantId}', options: { auth: false, handler: controller.getEngagementProfile, }, }, { method: 'POST', path: '/api/public/engagement/{eventId}/participants/{participantId}/photo', options: { auth: false, payload: { maxBytes: 20 * 1024 * 1024, output: 'stream', parse: true, multipart: true, allow: 'multipart/form-data', timeout: false, }, handler: controller.uploadEngagementPhoto, }, }, { method: 'PATCH', path: '/api/public/engagement/{eventId}/participants/{participantId}/profile', options: { auth: false, validate: { payload: profilePayload }, handler: controller.patchEngagementProfile, }, }, { method: 'POST', path: '/api/public/engagement/{eventId}/participants/{participantId}/progress', options: { auth: false, validate: { payload: progressPayload }, handler: controller.markEngagementProgress, }, }, { method: 'POST', path: '/api/public/engagement/{eventId}/participants/{participantId}/media', options: { auth: false, validate: { payload: mediaPayload }, handler: controller.saveEngagementMedia, }, }, { method: 'POST', path: '/api/public/engagement/{eventId}/participants/{participantId}/wall', options: { auth: false, validate: { payload: wallPayload }, handler: controller.postGalleryToWall, }, }, { method: 'GET', path: '/api/public/engagement/{eventId}/participants/{participantId}/file', options: { auth: false, handler: controller.downloadEngagementFile, }, }, ];