173 lines
4.3 KiB
JavaScript
173 lines
4.3 KiB
JavaScript
const routes = require("express").Router();
|
|
|
|
const { isAdministratorUser, isLoggedUser, isOptionalUser } = require("../../middlewares/accessValidator");
|
|
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",
|
|
isOptionalUser,
|
|
cacheSuccesses("1 minute"),
|
|
FieldMiddleware.middleware({
|
|
invalidFields: generalInvalidFields,
|
|
}),
|
|
PaginateMiddleware.middleware(),
|
|
SortMiddleware.middleware({ default: "name" }),
|
|
speakerController.find({
|
|
scopes: ["defaultScope", "onlyPublished", "includeValues", "includeMultimedias"],
|
|
})
|
|
);
|
|
|
|
// Ponentes destacados
|
|
routes.get(
|
|
"/speakers/featured",
|
|
isOptionalUser,
|
|
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",
|
|
isOptionalUser,
|
|
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",
|
|
isOptionalUser,
|
|
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",
|
|
isOptionalUser,
|
|
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;
|