app2-api/modules/speakers/speaker.routes.js
2022-02-23 19:27:58 +01:00

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;