const routes = require('express').Router(); const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator'); const SchemaValidator = require('../../middlewares/schemaValidator'); const PaginateMiddleware = require('../../middlewares/paginate'); const FieldMiddleware = require('../../middlewares/fields'); const SortMiddleware = require('../../middlewares/sort'); //const entityValidation = require('./entity.validations'); const eventController = require('./event.controller'); const eventValidation = require('./event.validations'); const generalInvalidFields = [ 'userId', 'createdAt', 'updatedAt', 'assistants', 'confirmed', 'allow_multiple', 'overflow_eventId', 'state', 'confirmed', 'multiple_limit', 'allow_overflow', 'marketing_list', ]; routes.get('/events', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-init_date" }), eventController.find({ scopes: ['defaultScope', 'includeVenue', 'includeMultimedias'], }), ); routes.get('/events/next', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "init_available_date" }), eventController.find({ scopes: ['defaultScope', 'next', 'includeVenue', 'includeMultimedias', 'includeSpeakers'], }), ); routes.get('/events/past', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-init_date" }), eventController.find({ scopes: ['defaultScope', 'past', 'includeVenue', 'includeMultimedias', 'includeSpeakers'], }), ); routes.get('/events/today', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-init_date" }), eventController.find({ scopes: ['defaultScope', 'today', 'includeVenue', 'includeMultimedias', 'includeSpeakers'], }), ); routes.get('/events/current', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-init_date" }), eventController.find({ scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeSpeakers'], }), ); routes.get('/events/:id', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), (req, res, next) => { console.log(req.user.id); return eventController.findOne({ scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeSpeakers', { 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 (1) de un usuario pero si el usuario fuera el administrador podría todas las inscripciones de un evento routes.get('/events/:id/inscriptions', isLoggedUser, eventController.getInscription, ); // Hacer una inscripción routes.post('/events/:id/inscriptions', isLoggedUser, SchemaValidator(eventValidation.InscriptionInputType, true), eventController.createInscription ); routes.delete('/events/:id/inscriptions', // Borrar una inscripción (poner el id de la inscripción????) isLoggedUser, //eventController.findComments ); 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 ); /* 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); module.exports = routes;