521 lines
15 KiB
JavaScript
521 lines
15 KiB
JavaScript
const routes = require('express').Router();
|
|
|
|
const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator');
|
|
const SchemaValidator = require('../../middlewares/schemaValidator');
|
|
|
|
const { cacheSuccesses } = require('../../middlewares/cache');
|
|
const PaginateMiddleware = require('../../middlewares/paginate');
|
|
const FieldMiddleware = require('../../middlewares/fields');
|
|
const SortMiddleware = require('../../middlewares/sort');
|
|
|
|
const eventController = require('./event.controller');
|
|
const eventInscriptionController = require('./events_inscriptions.controller');
|
|
const eventReservationController = require('./events_reservations.controller');
|
|
const eventQuestionController = require('./events_questions.controller');
|
|
const eventValidation = require('./event.validations');
|
|
|
|
const generalInvalidFields = [
|
|
'userId', 'createdAt', 'updatedAt',
|
|
'assistants', 'confirmed', 'allow_multiple', 'overflow_eventId',
|
|
'state', 'confirmed',
|
|
'multiple_limit', 'marketing_list',
|
|
];
|
|
|
|
routes.get('/events',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
(req, res, next) => {
|
|
if (!req.body.locationId)
|
|
return eventController.find({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
})(req, res, next)
|
|
else
|
|
return eventController.find({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimediaAvatar', 'includeDetails', { method: ['onlyOfLocation', req.body.locationId] }]
|
|
})(req, res, next);
|
|
}
|
|
);
|
|
|
|
routes.get('/events/cities',
|
|
isLoggedUser,
|
|
cacheSuccesses('24 hours'),
|
|
eventController.find({
|
|
scopes: ['CitiesOfEvents']
|
|
})
|
|
);
|
|
|
|
|
|
routes.get('/events/next',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "init_date" }),
|
|
(req, res, next) => {
|
|
// console.log(moment().add(1, 'days').startOf('day').format('YYYY-MM-DD HH:mm:ss'));
|
|
return eventController.find({
|
|
scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', { method: ['includeInscription', req.user.id] }],
|
|
})(req, res, next)
|
|
}
|
|
|
|
);
|
|
|
|
routes.get('/events/past',
|
|
isLoggedUser,
|
|
cacheSuccesses('1 minute'),
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'past', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
routes.get('/events/yesterday',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'yesterday', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
|
|
routes.get('/events/today',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'today', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
|
|
/*routes.get('/events/today',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
|
|
(req, res, next) => {
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', { method: ['includeInscription', req.user.id] }],
|
|
})(req, res, next)
|
|
.then (function (events) {
|
|
console.log('>>>> ', events); //.stateCode = 'current_event';
|
|
return events;
|
|
});
|
|
|
|
}
|
|
);*/
|
|
|
|
|
|
|
|
routes.get('/events/tomorrow',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'tomorrow', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
routes.get('/events/current',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
// Eventos destacados
|
|
routes.get('/events/featured',
|
|
isLoggedUser,
|
|
cacheSuccesses('1 minute'),
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimediaAvatar', 'featured']
|
|
})
|
|
);
|
|
|
|
routes.get('/events/:id',
|
|
isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
(req, res, next) => {
|
|
return eventController.findOne({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails', 'includeComments', { method: ['includeInscription', req.user.id] }]
|
|
})(req, res, next)
|
|
}
|
|
);
|
|
|
|
// Comentarios
|
|
|
|
routes.get('/events/:id/comments',
|
|
isLoggedUser,
|
|
(req, res, next) => {
|
|
req.params.association = 'Comments';
|
|
next();
|
|
},
|
|
eventController.find,
|
|
|
|
);
|
|
|
|
// Multimedias
|
|
routes.get('/events/:id/multimedias',
|
|
isLoggedUser,
|
|
(req, res, next) => {
|
|
req.params.association = 'Multimedias';
|
|
next();
|
|
},
|
|
eventController.find,
|
|
);
|
|
|
|
// Inscripciones
|
|
// Esto da las inscripciones de un usuario
|
|
routes.get('/events/:id/inscriptions',
|
|
isLoggedUser,
|
|
eventController.getInscriptions,
|
|
);
|
|
|
|
|
|
// Esto da todas las inscripciones de un usuario
|
|
routes.get('/me/inscriptions/count',
|
|
isLoggedUser,
|
|
/*(req, res, next) => {
|
|
req.apicacheGroup = req.user.id;
|
|
next();
|
|
},
|
|
cacheSuccesses('1 hour'),*/
|
|
eventController.getInscriptionsOfNextEventsCount,
|
|
);
|
|
|
|
// Esto da todas las inscripciones de un usuario
|
|
routes.get('/me/inscriptions',
|
|
isLoggedUser,
|
|
/*(req, res, next) => {
|
|
req.apicacheGroup = req.user.id;
|
|
next();
|
|
},
|
|
cacheSuccesses('1 hour'),*/
|
|
eventController.getInscriptions,
|
|
);
|
|
|
|
routes.get('/me/inscriptions/:id/mail',
|
|
isLoggedUser,
|
|
//cacheSuccesses('1 hour'),
|
|
eventController.sendMailTicket,
|
|
);
|
|
|
|
// Esto da la inscripción de un usuario
|
|
routes.get('/me/inscriptions/:id',
|
|
isLoggedUser,
|
|
/*(req, res, next) => {
|
|
req.apicacheGroup = req.user.id;
|
|
next();
|
|
},
|
|
cacheSuccesses('1 hour'),*/
|
|
eventController.getInscription,
|
|
);
|
|
|
|
|
|
// Hacer una inscripción
|
|
routes.post('/events/:id/inscriptions',
|
|
isLoggedUser,
|
|
SchemaValidator(eventValidation.InscriptionInputType, true),
|
|
eventController.createInscription
|
|
);
|
|
|
|
// Hacer una pregunta
|
|
routes.post('/events/:eventId/questions',
|
|
isLoggedUser,
|
|
SchemaValidator(eventValidation.EventQuestionInputType, true),
|
|
eventQuestionController.create()
|
|
);
|
|
|
|
// Borrar una inscripción
|
|
routes.delete('/inscriptions/:id',
|
|
isLoggedUser,
|
|
//SchemaValidator(eventValidation.InscriptionInputType, true),
|
|
eventController.deleteInscription
|
|
);
|
|
|
|
// Imagen del código QR de una inscripción
|
|
routes.get('/inscriptions/:id/qrimage', function (req, res) {
|
|
eventController.getQRCodeImage,
|
|
});
|
|
|
|
|
|
routes.get('/events/:id/reservations/:encodedInvitationCode',
|
|
isLoggedUser,
|
|
//eventController.findComments
|
|
eventController.checkReservationCode
|
|
);
|
|
|
|
|
|
|
|
|
|
//WEB
|
|
|
|
//Eventos con inscripciones abiertas para la web
|
|
routes.get('/web/events',
|
|
// isLoggedUser,
|
|
FieldMiddleware.middleware({
|
|
validFields: ['id', 'name']
|
|
}),
|
|
// PaginateMiddleware.middleware(),
|
|
// SortMiddleware.middleware({ default: "init_available_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'withOpenInscriptions']
|
|
}),
|
|
);
|
|
|
|
// Hacer una inscripción por la web
|
|
routes.post('/web/events/:id/inscriptions',
|
|
SchemaValidator(eventValidation.webInscriptionInputType, true),
|
|
eventController.createInscription
|
|
);
|
|
|
|
// Comprobar si estoy inscrito al congreso por la web
|
|
routes.get('/web/events/:id/inscriptions/:email',
|
|
eventController.checkInscription
|
|
);
|
|
|
|
|
|
/*
|
|
routes.get('/tickets/:id/',
|
|
isLoggedUser,
|
|
eventController.findComments
|
|
);
|
|
*/
|
|
|
|
//routes.get('/venues', isLoggedUser, SortMiddleware.middleware({ default: "name" }), venueController.find);
|
|
//routes.get('/venues/:id', isLoggedUser, venueController.findOne);
|
|
|
|
//routes.post('/entity/', SchemaValidator(VenueValidation.VenueInputType, true), venueController.create);
|
|
//routes.put('/venues/:id', isAdministratorUser, venueController.update);
|
|
//routes.delete('/venues/:id', isAdministratorUser, venueController.delete);
|
|
|
|
|
|
|
|
/********************************************************************************************************
|
|
* ADMINISTRACIÓN
|
|
*********************************************************************************************************
|
|
*/
|
|
// Inscripciones
|
|
// Esto da las inscripciones de un evento
|
|
routes.get('/admin/events/:id/inscriptions',
|
|
isAdministratorUser,
|
|
eventController.getInscriptions,
|
|
);
|
|
|
|
// Todos los ponentes
|
|
routes.get('/admin/events',
|
|
isAdministratorUser,
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
(req, res, next) => {
|
|
if (!req.body.city)
|
|
return eventController.find({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
})(req, res, next)
|
|
else
|
|
return eventController.find({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails', { method: ['onlyOfCity', req.body.city] }]
|
|
})(req, res, next);
|
|
}
|
|
);
|
|
|
|
routes.get('/admin/events/next',
|
|
isAdministratorUser,
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "init_available_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
routes.get('/admin/events/past',
|
|
isAdministratorUser,
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'past', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
routes.get('/admin/events/current',
|
|
isAdministratorUser,
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-init_date" }),
|
|
eventController.find({
|
|
scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeDetails'],
|
|
}),
|
|
);
|
|
|
|
routes.get('/admin/events/:id',
|
|
isAdministratorUser,
|
|
(req, res, next) => {
|
|
return eventController.findOne({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeOverflowEvent', 'includeDetails']
|
|
})(req, res, next)
|
|
}
|
|
);
|
|
|
|
routes.get('/admin/events/:id/partners',
|
|
isAdministratorUser,
|
|
eventController.findPartners,
|
|
);
|
|
|
|
routes.get('/admin/events/:id/colleges',
|
|
isAdministratorUser,
|
|
eventController.findColleges,
|
|
);
|
|
|
|
routes.get('/admin/events/:id/reservations/excel',
|
|
isAdministratorUser,
|
|
eventReservationController.getReservationsExcel,
|
|
);
|
|
|
|
routes.get('/admin/events/:id/reservations/:type/excel',
|
|
isAdministratorUser,
|
|
eventReservationController.getReservationsExcel,
|
|
);
|
|
|
|
routes.get('/admin/events/:id/inscriptions/excel',
|
|
isAdministratorUser,
|
|
eventController.getInscripcionsExcel,
|
|
);
|
|
|
|
routes.get('/admin/events/:id/reservations/:type/mail',
|
|
isAdministratorUser,
|
|
eventReservationController.sendMailReservationsEvent,
|
|
);
|
|
|
|
routes.get('/admin/events/:id/entity/:entityId/reservations/mail',
|
|
isAdministratorUser,
|
|
eventReservationController.sendMailReservationsEvent,
|
|
);
|
|
|
|
|
|
routes.get('/admin/events/:eventId/partners/:entityId/reservations',
|
|
isAdministratorUser,
|
|
eventReservationController.find(),
|
|
);
|
|
|
|
routes.get('/admin/events/:eventId/questions',
|
|
isAdministratorUser,
|
|
// PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-createdAt" }),
|
|
eventQuestionController.find({
|
|
scopes: ['includeUser', 'includeSpeaker'],
|
|
}),
|
|
);
|
|
|
|
|
|
routes.get('/admin/reservations/:id',
|
|
isAdministratorUser,
|
|
//SchemaValidator(eventValidation.ReservationInputType, true),
|
|
(req, res, next) => {
|
|
return eventReservationController.findOne({
|
|
scopes: ['includeEvent', 'includeInscriptions']
|
|
})(req, res, next)
|
|
},
|
|
|
|
);
|
|
|
|
routes.get('/admin/inscriptions/:id/mail',
|
|
isAdministratorUser,
|
|
//cacheSuccesses('1 hour'),
|
|
eventController.sendMailTicket,
|
|
);
|
|
|
|
routes.get('/admin/reservations/:id/mail',
|
|
isAdministratorUser,
|
|
eventReservationController.sendMailReservation,
|
|
);
|
|
|
|
|
|
routes.post('/admin/reservations',
|
|
isAdministratorUser,
|
|
//SchemaValidator(eventValidation.ReservationInputType, true),
|
|
eventReservationController.create(),
|
|
|
|
);
|
|
|
|
routes.put('/admin/reservations/:id',
|
|
isAdministratorUser,
|
|
//SchemaValidator(eventValidation.ReservationInputType, true),
|
|
eventReservationController.update(),
|
|
);
|
|
|
|
//Valida una inscripción
|
|
routes.put('/admin/inscriptions/:id',
|
|
isAdministratorUser,
|
|
//SchemaValidator(eventValidation.ReservationInputType, true),
|
|
eventController.validateInscription,
|
|
);
|
|
|
|
// Borrar reserva
|
|
routes.delete('/admin/reservations/:id',
|
|
isAdministratorUser,
|
|
eventReservationController.delete()
|
|
);
|
|
|
|
|
|
|
|
/********************************************************************************************************
|
|
* LIVE
|
|
*********************************************************************************************************
|
|
*/
|
|
routes.get('/live/events/:id',
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
(req, res, next) => {
|
|
return eventController.findOne({
|
|
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails']
|
|
})(req, res, next)
|
|
}
|
|
);
|
|
|
|
routes.get('/live/events/:eventId/speakers/:speakerId/questions',
|
|
SortMiddleware.middleware({ default: "-createdAt" }),
|
|
eventQuestionController.find({
|
|
scopes: ['includeUser', 'includeSpeaker'],
|
|
}),
|
|
);
|
|
|
|
routes.put('/live/questions/:id',
|
|
eventQuestionController.update(),
|
|
);
|
|
|
|
|
|
module.exports = routes; |