98 lines
2.6 KiB
JavaScript
98 lines
2.6 KiB
JavaScript
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,
|
|
},
|
|
},
|
|
];
|