EventBuzz_Backend/src/routes/publicEngagement.routes.js

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,
},
},
];