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 speakerController = require('./speaker.controller'); const generalInvalidFields = [ 'userId', 'createdAt', 'state', ]; // Todos los ponentes routes.get('/speakers', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "name" }), speakerController.find({ scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'includeMultimedias'], }) ); // Ponentes destacados routes.get('/speakers/featured', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "name" }), speakerController.find({ scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'featured', 'includeMultimedias'], }) ); // Ponentes más recientes routes.get('/speakers/last', isLoggedUser, FieldMiddleware.middleware({ invalidFields: ['userId'] }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-createdAt" }), speakerController.find({ scopes: ['defaultScope', 'onlyPublished', 'last', 'includeMultimedias'], }) ); // Un ponente routes.get('/speakers/:id', isLoggedUser, FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), speakerController.findOne({ scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'includeMultimedias', 'includeComments'], }) ); // Dar ponentes similares a uno dado routes.get('/speakers/:id/similar', isLoggedUser, /*FieldMiddleware.middleware({ invalidFields: ['createdAt'] }),*/ PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "name" }), speakerController.findSimilar() ); // Listar las preguntas hechas a un ponente routes.get('/speakers/:id/:association', isLoggedUser, /*FieldMiddleware.middleware({ invalidFields: ['createdAt'] }),*/ PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-createdAt" }), speakerController.find() ); /******************************************************************************************************** * ADMINISTRACIÓN ********************************************************************************************************* */ // Todos los ponentes routes.get('/admin/speakers', isAdministratorUser, SortMiddleware.middleware({ default: "name" }), speakerController.find({ scopes: ['defaultScope', 'includeValues', 'includeMultimedias'], }) ); // Un ponente routes.get('/admin/speakers/:id', isAdministratorUser, speakerController.findOne({ scopes: ['defaultScope', 'includeValues', 'includeMultimedias'] }) ); // Comentarios de un ponente routes.get('/admin/speakers/:id/comments', isAdministratorUser, (req, res, next) => { req.params.association = 'comments'; next(); }, speakerController.find() ); routes.get('/admin/speakers/:id/values', isAdministratorUser, (req, res, next) => { req.params.association = 'values'; next(); }, speakerController.find() ); routes.get('/admin/speakers/:id/questions', isAdministratorUser, (req, res, next) => { req.params.association = 'questions'; next(); }, speakerController.find() ); routes.get('/admin/speakers/:id/multimedias', isAdministratorUser, (req, res, next) => { req.params.association = 'multimedias'; next(); }, speakerController.find() ); // Nuevo ponente routes.post('/admin/speakers/', isAdministratorUser, speakerController.create() ); // Modificar ponente routes.put('/admin/speakers/:id', isAdministratorUser, speakerController.update() ); // Borrar ponente routes.delete('/admin/speakers/:id', isAdministratorUser, speakerController.delete() ); module.exports = routes;