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

608 lines
18 KiB
JavaScript
Raw Normal View History

2022-02-18 19:32:30 +00:00
const routes = require("express").Router();
2019-07-09 08:51:00 +00:00
2022-02-18 19:32:30 +00:00
const { isAdministratorUser, isLoggedUser, isOptionalUser } = require("../../middlewares/accessValidator");
const SchemaValidator = require("../../middlewares/schemaValidator");
2019-07-09 08:51:00 +00:00
2022-02-18 19:32:30 +00:00
const { cacheSuccesses } = require("../../middlewares/cache");
const PaginateMiddleware = require("../../middlewares/paginate");
const FieldMiddleware = require("../../middlewares/fields");
const SortMiddleware = require("../../middlewares/sort");
2019-07-09 08:51:00 +00:00
2022-02-18 19:32:30 +00:00
const authController = require("../auth/auth.controller");
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");
2019-07-09 08:51:00 +00:00
2019-07-17 12:07:35 +00:00
const generalInvalidFields = [
2022-02-18 19:32:30 +00:00
"userId",
"createdAt",
"updatedAt",
"assistants",
"confirmed",
"allow_multiple",
"overflow_eventId",
"state",
"confirmed",
"multiple_limit",
"marketing_list",
2019-07-17 12:07:35 +00:00
];
2022-02-18 19:32:30 +00:00
routes.get(
"/events",
isOptionalUser,
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",
isOptionalUser,
cacheSuccesses("24 hours"),
eventController.find({
scopes: ["CitiesOfEvents"],
})
);
// Esta ruta se dejará de usar a favor de "/events/next_by_country"
2022-02-18 19:32:30 +00:00
routes.get(
"/events/next",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "init_available_date" }),
(req, res, next) => {
const isLogged = req.user && req.user.id;
const scopes = ["defaultScope", "next", "includeVenue", "includeMultimedias"];
if (isLogged) {
scopes.push({ method: ["includeInscription", req.user.id] });
}
return eventController.find({ scopes })(req, res, next);
}
);
// Sustituye a "/events/next" a partir de la versión de la APP 1.4.4
routes.get(
"/events/next_by_country",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "init_available_date" }),
(req, res, next) => {
const isLogged = req.user && req.user.id;
const scopes = ["defaultScope", "next", "includeVenue", "includeMultimedias"];
if (isLogged) {
scopes.push({ method: ["includeInscription", req.user.id] });
}
return eventController.findNextEventsByCountry({ scopes })(req, res, next);
}
);
2022-02-18 19:32:30 +00:00
routes.get(
"/events/past",
isOptionalUser,
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",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({
scopes: ["defaultScope", "yesterday", "includeVenue", "includeMultimedias", "includeDetails"],
})
);
routes.get(
"/events/today",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({
scopes: ["defaultScope", "today", "includeVenue", "includeMultimedias", "includeDetails"],
})
2019-09-27 22:03:34 +00:00
);
2019-09-27 15:55:13 +00:00
2019-09-27 15:34:22 +00:00
/*routes.get('/events/today',
2019-09-27 15:07:51 +00:00
isLoggedUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
(req, res, next) => {
2019-09-27 15:22:43 +00:00
eventController.find({
scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', { method: ['includeInscription', req.user.id] }],
2019-09-27 15:07:51 +00:00
})(req, res, next)
2019-09-27 15:22:43 +00:00
.then (function (events) {
console.log('>>>> ', events); //.stateCode = 'current_event';
return events;
});
2019-09-27 15:07:51 +00:00
}
2019-09-27 15:34:22 +00:00
);*/
2022-02-18 19:32:30 +00:00
routes.get(
"/events/tomorrow",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({
scopes: ["defaultScope", "tomorrow", "includeVenue", "includeMultimedias", "includeDetails"],
})
);
routes.get(
"/events/current",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({
scopes: ["defaultScope", "current", "includeVenue", "includeMultimedias", "includeDetails"],
})
2019-07-09 15:48:29 +00:00
);
2019-11-21 16:08:08 +00:00
// Eventos destacados
2022-02-18 19:32:30 +00:00
routes.get(
"/events/featured",
isOptionalUser,
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",
isOptionalUser,
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
(req, res, next) => {
const isLogged = req.user && req.user.id;
const scopes = ["defaultScope", "includeVenue", "includeMultimedias", "includeDetails", "includeComments"];
if (isLogged) {
scopes.push({ method: ["includeInscription", req.user.id] });
}
2022-02-18 19:32:30 +00:00
return eventController.findOne({ scopes })(req, res, next);
}
2019-07-09 17:39:52 +00:00
);
2019-07-09 18:34:39 +00:00
// Comentarios
2022-02-18 19:32:30 +00:00
routes.get(
"/events/:id/comments",
isOptionalUser,
(req, res, next) => {
req.params.association = "Comments";
next();
},
eventController.find
2019-07-12 11:19:15 +00:00
);
// Multimedias
2022-02-18 19:32:30 +00:00
routes.get(
"/events/:id/multimedias",
isOptionalUser,
(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
2022-02-17 12:12:13 +00:00
// Comprobar capacidad del grupo
2022-02-18 19:32:30 +00:00
routes.get("/events/:id/check_capacity", isOptionalUser, eventController.checkCapacity);
2022-02-17 12:12:13 +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
2022-02-18 19:32:30 +00:00
routes.get("/events/:id/inscriptions", isLoggedUser, eventController.getInscriptions);
2019-08-20 15:37:53 +00:00
2019-07-30 16:24:06 +00:00
// Esto da todas las inscripciones de un usuario
2022-02-18 19:32:30 +00:00
routes.get(
"/me/inscriptions/count",
isLoggedUser,
/*(req, res, next) => {
2019-07-30 16:24:06 +00:00
req.apicacheGroup = req.user.id;
next();
},
cacheSuccesses('1 hour'),*/
2022-02-18 19:32:30 +00:00
eventController.getInscriptionsOfNextEventsCount
2019-07-30 16:24:06 +00:00
);
2019-07-25 18:43:03 +00:00
// Esto da todas las inscripciones de un usuario
2022-02-18 19:32:30 +00:00
routes.get(
"/me/inscriptions",
isLoggedUser,
/*(req, res, next) => {
2019-07-28 20:08:15 +00:00
req.apicacheGroup = req.user.id;
next();
},
cacheSuccesses('1 hour'),*/
2022-02-18 19:32:30 +00:00
eventController.getInscriptions
2019-07-25 18:29:33 +00:00
);
2022-02-18 19:32:30 +00:00
routes.get(
"/me/inscriptions/:id/mail",
isLoggedUser,
//cacheSuccesses('1 hour'),
eventController.sendMailTicket
2019-08-31 11:47:15 +00:00
);
2019-07-28 20:08:15 +00:00
// Esto da la inscripción de un usuario
2022-02-18 19:32:30 +00:00
routes.get(
"/me/inscriptions/:id",
isLoggedUser,
/*(req, res, next) => {
2019-07-28 20:08:15 +00:00
req.apicacheGroup = req.user.id;
next();
},
cacheSuccesses('1 hour'),*/
2022-03-11 11:37:03 +00:00
eventInscriptionController.getInscription
2019-07-28 20:08:15 +00:00
);
// Hacer una inscripción
2022-02-18 19:32:30 +00:00
routes.post(
"/events/:id/inscriptions",
isLoggedUser,
SchemaValidator(eventValidation.InscriptionInputType, true),
//Prepara los datos de la inscripción tipo ....
2022-03-11 11:37:03 +00:00
eventInscriptionController.prepareDataInscription,
2022-02-18 19:32:30 +00:00
//Recupera la reservation si viene
eventReservationController.recuperateReservationByCode,
//Recupera a registra el usuario que se va a inscribir
authController.getOrCreateUser,
//Comprobamos si tiene ya una incripción, en tal caso, comprobamos el código de reserva sea el de la inscripcion hecha,
2022-03-11 11:37:03 +00:00
//si no es así es el caso de un usuario que se reinscribe con otro código de reserva
eventInscriptionController.checkInscriptionByUser,
2022-02-18 19:32:30 +00:00
//Si es un usuario tutor y solicita un group_size se crea la reserva
eventReservationController.createReservationToEntity,
2022-02-23 18:27:58 +00:00
eventReservationController.activeReservationToEntity,
(req, res, next) => {
if (res.locals.dataInscription.reservation) {
console.log(">>>>>>>Incripcion con reserva");
eventReservationController.createInscriptionReservation(req, res, next);
} else {
console.log(">>>>>>>Incripcion sin reserva");
eventInscriptionController.createInscription(req, res, next);
}
//next();
}
// eventInscriptionController.createInscriptionMarketingList
2019-07-09 18:34:39 +00:00
);
2019-09-19 11:30:32 +00:00
// Hacer una pregunta
2022-02-18 19:32:30 +00:00
routes.post(
"/events/:eventId/questions",
isLoggedUser,
SchemaValidator(eventValidation.EventQuestionInputType, true),
eventQuestionController.create()
2019-09-19 11:30:32 +00:00
);
2019-07-25 16:39:18 +00:00
// Borrar una inscripción
2022-02-18 19:32:30 +00:00
routes.delete(
"/inscriptions/:id",
isLoggedUser,
//SchemaValidator(eventValidation.InscriptionInputType, true),
2022-03-11 11:37:03 +00:00
eventInscriptionController.deleteInscription
2019-07-09 18:34:39 +00:00
);
// Imagen del código QR de una inscripción
2022-02-18 19:32:30 +00:00
routes.get("/inscriptions/:id/qrimage", eventController.getQRCodeImage);
2019-07-09 18:34:39 +00:00
2024-08-02 08:28:00 +00:00
// Comprobar el código de invitación
2022-02-18 19:32:30 +00:00
routes.get(
"/events/:id/reservations/:encodedInvitationCode",
isLoggedUser,
//eventController.findComments
2022-02-23 18:27:58 +00:00
eventReservationController.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
2022-02-18 19:32:30 +00:00
routes.get(
"/web/events",
// isLoggedUser,
FieldMiddleware.middleware({
validFields: ["id", "name"],
}),
// PaginateMiddleware.middleware(),
// SortMiddleware.middleware({ default: "init_available_date" }),
eventController.find({
scopes: ["defaultScope", "withOpenInscriptions"],
})
2024-08-28 16:25:50 +00:00
2019-07-23 11:35:20 +00:00
);
2019-07-23 11:52:14 +00:00
// Hacer una inscripción por la web
2022-02-18 19:32:30 +00:00
routes.post(
"/web/events/:id/inscriptions",
SchemaValidator(eventValidation.webInscriptionInputType, true),
2022-09-22 13:59:33 +00:00
//Prepara los datos de la inscripción tipo ....
eventInscriptionController.prepareDataInscription,
//Recupera la reservation si viene
eventReservationController.recuperateReservationByCode,
//Recupera a registra el usuario que se va a inscribir
authController.getOrCreateUser,
//Comprobamos si tiene ya una incripción, en tal caso, comprobamos el código de reserva sea el de la inscripcion hecha,
2022-09-22 13:59:33 +00:00
//si no es así es el caso de un usuario que se reinscribe con otro código de reserva
eventInscriptionController.checkInscriptionByUser,
//Al ser via web siempre será inscripción con codigo de reserva
2022-09-22 14:04:42 +00:00
(req, res, next) => {
eventReservationController.createInscriptionReservation(req, res, next);
}
2019-07-23 11:52:14 +00:00
);
2019-08-31 10:38:13 +00:00
// Comprobar si estoy inscrito al congreso por la web
2022-03-11 11:37:03 +00:00
routes.get("/web/events/:id/inscriptions/:email", eventInscriptionController.checkInscriptionByMail);
2019-07-23 11:52:14 +00:00
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
/********************************************************************************************************
2022-02-18 19:32:30 +00:00
* ADMINISTRACIÓN
*********************************************************************************************************
2019-08-09 11:00:42 +00:00
*/
2019-08-20 15:37:53 +00:00
// Inscripciones
// Esto da las inscripciones de un evento
2022-03-11 11:37:03 +00:00
routes.get("/admin/events/:id/inscriptions/online", isAdministratorUser, eventController.getInscriptionsOnline);
2022-02-18 19:32:30 +00:00
routes.get("/admin/events/:id/inscriptions", isAdministratorUser, eventController.getInscriptions);
2019-08-09 11:00:42 +00:00
// Todos los ponentes
2022-02-18 19:32:30 +00:00
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
);
2022-03-11 11:37:03 +00:00
routes.get(
"/admin/events/:id/syncMarketingList",
//isAdministratorUser,
eventController.syncronizeMarketingList
);
2022-02-18 19:32:30 +00:00
routes.get(
"/admin/events/:id/reservations/:typeOrId/excel",
2022-02-18 19:32:30 +00:00
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"],
})
);
2019-08-09 11:00:42 +00:00
2022-02-18 19:32:30 +00:00
routes.get(
"/admin/reservations/:id",
isAdministratorUser,
//SchemaValidator(eventValidation.ReservationInputType, true),
(req, res, next) => {
return eventReservationController.findOne({
scopes: ["includeEvent", "includeInscriptions"],
})(req, res, next);
}
2019-08-09 11:00:42 +00:00
);
2022-02-18 19:32:30 +00:00
routes.get(
"/admin/inscriptions/:id/mail",
isAdministratorUser,
//cacheSuccesses('1 hour'),
eventController.sendMailTicket
2019-08-09 11:00:42 +00:00
);
2022-02-18 19:32:30 +00:00
routes.get("/admin/reservations/:id/mail", isAdministratorUser, eventReservationController.sendMailReservation);
2019-08-19 17:54:39 +00:00
2022-02-18 19:32:30 +00:00
routes.post(
"/admin/reservations",
isAdministratorUser,
//SchemaValidator(eventValidation.ReservationInputType, true),
eventReservationController.create()
2019-08-21 11:31:10 +00:00
);
2022-02-18 19:32:30 +00:00
routes.put(
"/admin/reservations/:id",
isAdministratorUser,
//SchemaValidator(eventValidation.ReservationInputType, true),
eventReservationController.checkAssitantsUpdate,
eventReservationController.update()
2019-08-16 17:49:25 +00:00
);
2019-08-09 11:00:42 +00:00
2022-02-23 18:27:58 +00:00
routes.put(
"/admin/reservations/:id/activate",
// isAdministratorUser,
//SchemaValidator(eventValidation.ReservationInputType, true),
eventReservationController.activarReservation
);
2019-09-12 09:54:00 +00:00
//Valida una inscripción
2022-02-18 19:32:30 +00:00
routes.put(
"/admin/inscriptions/:id",
isAdministratorUser,
//SchemaValidator(eventValidation.ReservationInputType, true),
eventController.validateInscription
2019-09-12 09:54:00 +00:00
);
2019-08-16 21:27:18 +00:00
// Borrar reserva
routes.delete("/admin/reservations/:id", isAdministratorUser, eventReservationController.deleteReservationById);
2019-09-30 10:07:25 +00:00
/********************************************************************************************************
* LIVE
*********************************************************************************************************
*/
2022-02-18 19:32:30 +00:00
routes.get(
"/live/events/:id",
FieldMiddleware.middleware({
invalidFields: generalInvalidFields,
}),
(req, res, next) => {
return eventController.findOne({
2023-03-23 10:23:24 +00:00
scopes: ["defaultScope", "includeVenue", "includeMultimedias", "includeDetails"],
2022-02-18 19:32:30 +00:00
})(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());
2019-09-30 10:07:25 +00:00
2020-04-21 10:23:01 +00:00
module.exports = routes;