app2-api/modules/events/event.routes.js

381 lines
11 KiB
JavaScript
Raw Normal View History

2019-07-09 08:51:00 +00:00
const routes = require('express').Router();
const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator');
const SchemaValidator = require('../../middlewares/schemaValidator');
2019-07-28 20:08:15 +00:00
const { cacheSuccesses } = require('../../middlewares/cache');
2019-07-09 16:56:22 +00:00
const PaginateMiddleware = require('../../middlewares/paginate');
const FieldMiddleware = require('../../middlewares/fields');
const SortMiddleware = require('../../middlewares/sort');
2019-07-09 08:51:00 +00:00
//const entityValidation = require('./entity.validations');
const eventController = require('./event.controller');
2019-08-16 17:49:25 +00:00
const eventInscriptionController = require('./events_inscriptions.controller');
2019-08-14 17:49:38 +00:00
const eventReservationController = require('./events_reservations.controller');
2019-07-16 18:18:28 +00:00
const eventValidation = require('./event.validations');
2019-07-09 08:51:00 +00:00
2019-07-17 12:07:35 +00:00
const generalInvalidFields = [
'userId', 'createdAt', 'updatedAt',
2019-07-21 20:58:41 +00:00
'assistants', 'confirmed', 'allow_multiple', 'overflow_eventId',
'state', 'confirmed',
2019-07-17 12:07:35 +00:00
'multiple_limit', 'allow_overflow', 'marketing_list',
];
2019-07-09 15:48:29 +00:00
routes.get('/events',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-17 12:07:35 +00:00
FieldMiddleware.middleware({
invalidFields: generalInvalidFields
}),
2019-07-09 16:56:22 +00:00
PaginateMiddleware.middleware(),
2019-07-18 11:23:43 +00:00
SortMiddleware.middleware({ default: "-init_date" }),
2019-07-29 16:27:38 +00:00
(req, res, next) => {
if (!req.body.city)
return eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-07-29 16:27:38 +00:00
})(req, res, next)
else
return eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails', { method: ['onlyOfCity', req.body.city] }]
2019-07-29 16:27:38 +00:00
})(req, res, next);
}
2019-07-09 15:48:29 +00:00
);
2019-07-29 15:10:23 +00:00
routes.get('/events/cities',
isLoggedUser,
SortMiddleware.middleware({ default: "city" }),
eventController.find({
scopes: ['CitiesOfEvents']
})
);
2019-07-09 15:48:29 +00:00
routes.get('/events/next',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-11 18:05:06 +00:00
FieldMiddleware.middleware({
2019-07-17 12:07:35 +00:00
invalidFields: generalInvalidFields
2019-07-11 18:05:06 +00:00
}),
2019-07-09 16:56:22 +00:00
PaginateMiddleware.middleware(),
2019-07-10 08:42:03 +00:00
SortMiddleware.middleware({ default: "init_available_date" }),
2019-08-09 16:12:57 +00:00
(req, res, next) => {
return eventController.find({
scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', { method: ['includeInscription', req.user.id] }],
})(req, res, next)
}
2019-07-09 15:48:29 +00:00
);
2019-07-23 09:09:19 +00:00
2019-07-28 20:08:15 +00:00
routes.get('/events/past', cacheSuccesses('24 hours'),
2019-07-23 11:35:20 +00:00
isLoggedUser,
2019-07-23 09:09:19 +00:00
FieldMiddleware.middleware({
2019-07-23 11:35:20 +00:00
invalidFields: generalInvalidFields
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
2019-07-23 09:09:19 +00:00
eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'past', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-07-23 09:09:19 +00:00
}),
);
2019-07-09 15:48:29 +00:00
2019-07-23 11:35:20 +00:00
routes.get('/events/today',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-17 12:07:35 +00:00
FieldMiddleware.middleware({
invalidFields: generalInvalidFields
2019-07-23 11:35:20 +00:00
}),
2019-07-09 17:39:52 +00:00
PaginateMiddleware.middleware(),
2019-07-23 11:35:20 +00:00
SortMiddleware.middleware({ default: "-init_date" }),
2019-07-17 15:13:55 +00:00
eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'today', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-07-17 15:13:55 +00:00
}),
2019-07-09 15:48:29 +00:00
);
routes.get('/events/current',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-17 12:07:35 +00:00
FieldMiddleware.middleware({
invalidFields: generalInvalidFields
}),
2019-07-09 17:39:52 +00:00
PaginateMiddleware.middleware(),
2019-07-18 11:23:43 +00:00
SortMiddleware.middleware({ default: "-init_date" }),
2019-07-17 15:34:54 +00:00
eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-07-17 15:34:54 +00:00
}),
2019-07-09 15:48:29 +00:00
);
2019-07-09 17:39:52 +00:00
routes.get('/events/:id',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-17 12:07:35 +00:00
FieldMiddleware.middleware({
invalidFields: generalInvalidFields
2019-07-21 18:48:19 +00:00
}),
2019-07-21 17:53:07 +00:00
(req, res, next) => {
return eventController.findOne({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails', { method: ['includeInscription', req.user.id] }]
2019-07-21 18:48:19 +00:00
})(req, res, next)
2019-07-21 17:53:07 +00:00
}
2019-07-09 17:39:52 +00:00
);
2019-07-09 18:34:39 +00:00
// Comentarios
2019-07-09 17:39:52 +00:00
routes.get('/events/:id/comments',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-12 11:19:15 +00:00
(req, res, next) => {
req.params.association = 'Comments';
next();
},
eventController.find,
);
// Multimedias
routes.get('/events/:id/multimedias',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-12 11:19:15 +00:00
(req, res, next) => {
req.params.association = 'Multimedias';
next();
},
eventController.find,
2019-07-09 17:39:52 +00:00
);
2019-07-09 15:48:29 +00:00
2019-07-09 18:34:39 +00:00
// Inscripciones
2019-08-20 15:37:53 +00:00
// Esto da las inscripciones de un usuario
2019-07-09 18:34:39 +00:00
routes.get('/events/:id/inscriptions',
2019-08-20 15:37:53 +00:00
isLoggedUser,
2019-07-25 18:43:03 +00:00
eventController.getInscriptions,
2019-07-09 18:34:39 +00:00
);
2019-08-20 15:37:53 +00:00
2019-07-30 16:24:06 +00:00
// 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,
);
2019-07-25 18:43:03 +00:00
// Esto da todas las inscripciones de un usuario
routes.get('/me/inscriptions',
2019-07-25 18:29:33 +00:00
isLoggedUser,
2019-07-28 20:08:15 +00:00
/*(req, res, next) => {
req.apicacheGroup = req.user.id;
next();
},
cacheSuccesses('1 hour'),*/
2019-07-25 18:43:03 +00:00
eventController.getInscriptions,
2019-07-25 18:29:33 +00:00
);
2019-07-28 20:08:15 +00:00
// 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,
);
// Inscription QR Code
routes.get('/me/inscriptions/:id/qr', isLoggedUser,
//cacheSuccesses('1 hour'),
eventController.getQRCodeInscription,
);
/*router.get('/:conferenceId/inscription/:userId/qrimage', function (req, res) {
conference.getInscriptionQRCode(req.params.conferenceId, req.params.userId, function (result, status) {
if (result && result.data) {
var buffer = new Buffer(result.data.split(",")[1], 'base64');
res.writeHead(status, {
'Content-Type': 'image/png',
'Content-Length': buffer.length
});
res.end(buffer);
} else {
res.status(200).end('')
}
});
});*/
2019-07-19 17:39:19 +00:00
// Hacer una inscripción
2019-07-09 18:34:39 +00:00
routes.post('/events/:id/inscriptions',
2019-07-21 13:30:49 +00:00
isLoggedUser,
2019-07-22 09:50:30 +00:00
SchemaValidator(eventValidation.InscriptionInputType, true),
2019-07-12 09:48:04 +00:00
eventController.createInscription
2019-07-09 18:34:39 +00:00
);
2019-07-25 16:39:18 +00:00
// Borrar una inscripción
routes.delete('/inscriptions/:id',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-25 16:39:18 +00:00
//SchemaValidator(eventValidation.InscriptionInputType, true),
eventController.deleteInscription
2019-07-09 18:34:39 +00:00
);
routes.get('/events/:id/reservations/:encodedInvitationCode',
2019-07-21 14:15:22 +00:00
isLoggedUser,
2019-07-09 18:34:39 +00:00
//eventController.findComments
2019-07-19 19:36:20 +00:00
eventController.checkReservationCode
2019-07-09 18:34:39 +00:00
);
2019-07-23 11:35:20 +00:00
//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']
}),
);
2019-07-23 11:52:14 +00:00
// Hacer una inscripción por la web
routes.post('/web/events/:id/inscriptions',
2019-08-13 18:00:27 +00:00
SchemaValidator(eventValidation.webInscriptionInputType, true),
2019-07-23 11:52:14 +00:00
eventController.createInscription
);
2019-07-21 17:36:25 +00:00
/*
routes.get('/tickets/:id/',
isLoggedUser,
eventController.findComments
);
*/
2019-07-09 18:34:39 +00:00
2019-07-09 08:51:00 +00:00
//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);
2019-08-09 11:00:42 +00:00
/********************************************************************************************************
* ADMINISTRACIÓN
*********************************************************************************************************
*/
2019-08-20 15:37:53 +00:00
// Inscripciones
// Esto da las inscripciones de un evento
routes.get('/admin/events/:id/inscriptions',
isAdministratorUser,
eventController.getInscriptions,
);
2019-08-09 11:00:42 +00:00
// Todos los ponentes
routes.get('/admin/events',
isAdministratorUser,
PaginateMiddleware.middleware(),
2019-08-14 17:49:38 +00:00
SortMiddleware.middleware({ default: "-init_date" }),
2019-08-09 11:00:42 +00:00
(req, res, next) => {
if (!req.body.city)
return eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-08-09 11:00:42 +00:00
})(req, res, next)
else
return eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeDetails', { method: ['onlyOfCity', req.body.city] }]
2019-08-09 11:00:42 +00:00
})(req, res, next);
}
);
routes.get('/admin/events/next',
isAdministratorUser,
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "init_available_date" }),
eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-08-09 11:00:42 +00:00
}),
);
routes.get('/admin/events/past',
isAdministratorUser,
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'past', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-08-09 11:00:42 +00:00
}),
);
routes.get('/admin/events/current',
isAdministratorUser,
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({
2019-08-14 17:49:38 +00:00
scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeDetails'],
2019-08-09 11:00:42 +00:00
}),
);
routes.get('/admin/events/:id',
isAdministratorUser,
(req, res, next) => {
return eventController.findOne({
2019-08-20 15:37:53 +00:00
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeOverflowEvent', 'includeDetails']
2019-08-09 11:00:42 +00:00
})(req, res, next)
}
);
2019-08-14 17:49:38 +00:00
routes.get('/admin/events/:id/partners',
2019-08-19 17:54:39 +00:00
isAdministratorUser,
2019-08-14 17:49:38 +00:00
eventController.findPartners,
);
2019-08-20 19:13:30 +00:00
routes.get('/admin/events/:id/colleges',
isAdministratorUser,
eventController.findColleges,
);
2019-08-19 17:54:39 +00:00
routes.get('/admin/events/:id/reservations/excel',
isAdministratorUser,
eventController.getReservationsExcel,
);
2019-08-20 16:39:05 +00:00
routes.get('/admin/events/:id/inscriptions/excel',
isAdministratorUser,
eventController.getInscripcionsExcel,
);
2019-08-17 12:42:20 +00:00
routes.get('/admin/events/:eventId/partners/:entityId/reservations',
2019-08-19 17:54:39 +00:00
isAdministratorUser,
2019-08-17 12:42:20 +00:00
eventReservationController.find(),
);
2019-08-14 17:49:38 +00:00
routes.post('/admin/reservations',
2019-08-19 17:54:39 +00:00
isAdministratorUser,
2019-08-15 12:33:21 +00:00
//SchemaValidator(eventValidation.ReservationInputType, true),
eventReservationController.create(),
);
2019-08-09 11:00:42 +00:00
2019-08-15 18:09:50 +00:00
routes.get('/admin/reservations/:id',
2019-08-19 17:54:39 +00:00
isAdministratorUser,
2019-08-15 18:09:50 +00:00
//SchemaValidator(eventValidation.ReservationInputType, true),
2019-08-16 17:49:25 +00:00
(req, res, next) => {
return eventReservationController.findOne({
scopes: ['includeEvent', 'includeInscriptions']
})(req, res, next)
},
2019-08-15 18:09:50 +00:00
);
2019-08-16 17:49:25 +00:00
routes.put('/admin/reservations/:id',
2019-08-19 17:54:39 +00:00
isAdministratorUser,
2019-08-16 17:49:25 +00:00
//SchemaValidator(eventValidation.ReservationInputType, true),
eventReservationController.update(),
);
2019-08-09 11:00:42 +00:00
2019-08-16 21:27:18 +00:00
// Borrar reserva
2019-08-16 17:49:25 +00:00
routes.delete('/admin/reservations/:id',
2019-08-19 17:54:39 +00:00
isAdministratorUser,
2019-08-16 17:49:25 +00:00
eventReservationController.delete()
);
2019-07-09 08:51:00 +00:00
module.exports = routes;