182 lines
4.6 KiB
JavaScript
182 lines
4.6 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 entityValidation = require('./entity.validations');
|
|
const speakerController = require('./speaker.controller');
|
|
|
|
const generalInvalidFields = [
|
|
'userId', 'createdAt', 'state',
|
|
];
|
|
|
|
// Todos los ponentes
|
|
routes.get('/speakers',
|
|
isLoggedUser,
|
|
cacheSuccesses('24 hours'),
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "name" }),
|
|
speakerController.find({
|
|
scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'includeMultimedias'],
|
|
})
|
|
);
|
|
|
|
// Ponentes destacados
|
|
routes.get('/speakers/featured',
|
|
isLoggedUser,
|
|
cacheSuccesses('1 minute'),
|
|
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,
|
|
cacheSuccesses('1 minute'),
|
|
FieldMiddleware.middleware({
|
|
invalidFields: ['userId']
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "-createdAt" }),
|
|
speakerController.find({
|
|
scopes: ['defaultScope', 'onlyPublished', 'last', 'includeMultimedias'],
|
|
})
|
|
);
|
|
|
|
// Un ponente
|
|
routes.get('/speakers/:id',
|
|
isLoggedUser,
|
|
cacheSuccesses('24 hours'),
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields
|
|
}),
|
|
speakerController.findOne({
|
|
scopes: ['defaultScope', 'onlyPublished', 'includeValues', 'includeMultimedias', 'includeComments'],
|
|
})
|
|
);
|
|
|
|
|
|
// Dar ponentes similares a uno dado
|
|
routes.get('/speakers/:id/similar',
|
|
isLoggedUser,
|
|
cacheSuccesses('24 hours'),
|
|
/*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; |