.
This commit is contained in:
parent
20372c839b
commit
6ff351a07c
@ -16,6 +16,9 @@ const defaultOptions = {
|
||||
find: { includeAll: false },
|
||||
findOne: { includeAll: false, paginate: { limit: 1, page: 1 } },
|
||||
count: {},
|
||||
create: {},
|
||||
update: {},
|
||||
delete: {},
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,7 +42,7 @@ const generateControllers = (service, extraControllers = {}, options = {}) => {
|
||||
const result = await service.fetchAll(params, buildContext(req, config));
|
||||
return handleResultResponse(result.rows, result.count, params, res);
|
||||
} catch (error) {
|
||||
handleErrorResponse(_options.MODULE_NAME, 'find', error, res)
|
||||
return handleErrorResponse(_options.MODULE_NAME, 'find', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -52,7 +55,7 @@ const generateControllers = (service, extraControllers = {}, options = {}) => {
|
||||
return handleResultResponse(result, null, params, res, (result === null) ? httpStatus.NOT_FOUND : httpStatus.OK);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
handleErrorResponse(_options.MODULE_NAME, 'findOne', error, res)
|
||||
return handleErrorResponse(_options.MODULE_NAME, 'findOne', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -64,7 +67,7 @@ const generateControllers = (service, extraControllers = {}, options = {}) => {
|
||||
const result = await service.count(params, buildContext(req, config));
|
||||
return handleResultResponse(result, null, params, res);
|
||||
} catch (error) {
|
||||
handleErrorResponse(_options.MODULE_NAME, 'count', error, res)
|
||||
return handleErrorResponse(_options.MODULE_NAME, 'count', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -75,18 +78,33 @@ const generateControllers = (service, extraControllers = {}, options = {}) => {
|
||||
const result = await service.create(req.body, buildContext(req, config));
|
||||
return handleResultResponse(result, null, null, res, httpStatus.CREATED)
|
||||
} catch (error) {
|
||||
handleErrorResponse(_options.MODULE_NAME, 'create', error, res)
|
||||
return handleErrorResponse(_options.MODULE_NAME, 'create', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
update: (config) => {
|
||||
return async (req, res, next) => {
|
||||
try {
|
||||
const result = await service.update(req.params, req.body, buildContext(req, config));
|
||||
return handleResultResponse(result, null, req.params, res, httpStatus.OK)
|
||||
try {
|
||||
const params = extractParamsFromRequest(req, res, _options.params.update);
|
||||
const response = await service.update(params, req.body, buildContext(req, config));
|
||||
// https://sequelize.org/master/class/lib/model.js~Model.html#static-method-update
|
||||
// Update devuelve un array de un elemento con el número de filas afectadas
|
||||
// por la operación. Por comodidad, devuelvo el valor, no el array.
|
||||
|
||||
let result = response[0];
|
||||
let status = httpStatus.OK;
|
||||
if (result < 1) {
|
||||
status = httpStatus.NOT_FOUND;
|
||||
}
|
||||
|
||||
// Express no puede devolver números porque los confunde con el 'status'.
|
||||
// Convertimos a cadena.
|
||||
result = result.toString();
|
||||
|
||||
return handleResultResponse(result, null, req.params, res, status)
|
||||
} catch (error) {
|
||||
handleErrorResponse(_options.MODULE_NAME, 'update', error, res)
|
||||
return handleErrorResponse(_options.MODULE_NAME, 'update', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -97,7 +115,7 @@ const generateControllers = (service, extraControllers = {}, options = {}) => {
|
||||
const result = await service.delete(req.params, buildContext(req, config));
|
||||
return handleResultResponse(result, null, req.params, res, httpStatus.NO_CONTENT);
|
||||
} catch (error) {
|
||||
handleErrorResponse(_options.MODULE_NAME, 'delete', error, res)
|
||||
return handleErrorResponse(_options.MODULE_NAME, 'delete', error, res)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -70,18 +70,17 @@ function foundModelAssociation(model, associationName) {
|
||||
|
||||
const parseParamsToFindOptions = (params) => {
|
||||
const result = {};
|
||||
|
||||
// Include All
|
||||
result.include = (params.includeAll) ? [{ all: true }] : [];
|
||||
|
||||
// Query
|
||||
if (params.query) {
|
||||
result.query = params.query
|
||||
}
|
||||
|
||||
// Params
|
||||
// Query & params
|
||||
result.where = {};
|
||||
if (params.query) {
|
||||
result.where = params.query;
|
||||
}
|
||||
if (params.params) {
|
||||
result.where = params.params
|
||||
result.where = Object.assign(result.where, params.params);
|
||||
}
|
||||
|
||||
// Paginate
|
||||
@ -166,7 +165,8 @@ const generateService = (model, extraMethods = {}, options = defaultOptions) =>
|
||||
// Necesario para el cálculo del count
|
||||
// https://github.com/sequelize/sequelize/issues/10557
|
||||
findOptions.distinct = true;
|
||||
|
||||
console.log('findOptions');
|
||||
console.log(findOptions);
|
||||
const result = await model.scope(context.scopes).findAndCountAll(findOptions);
|
||||
|
||||
if (extraMethods.afterFetchAll) {
|
||||
@ -196,8 +196,7 @@ const generateService = (model, extraMethods = {}, options = defaultOptions) =>
|
||||
return extraMethods.afterCount(result, params, context);
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
create: async (values, context) => {
|
||||
@ -206,6 +205,7 @@ const generateService = (model, extraMethods = {}, options = defaultOptions) =>
|
||||
|
||||
update: async (params, values, context) => {
|
||||
const findOptions = parseParamsToFindOptions(params);
|
||||
console.log(findOptions);
|
||||
return await model.scope(context.scopes).update(values, findOptions)
|
||||
},
|
||||
|
||||
|
||||
@ -108,6 +108,10 @@ const middleware = (limit = 10, maxLimit = 50) => {
|
||||
res.locals.paginate.hasPreviousPages = req.query.page > 1;
|
||||
res.locals.paginate.hasNextPages = hasNextPages(req);
|
||||
res.locals.paginate.getArrayPages = getArrayPages(req);
|
||||
|
||||
// Todo lo relativo a paginación va ahora a res.locals.paginate
|
||||
delete req.query.page;
|
||||
delete req.query.limit;
|
||||
|
||||
next();
|
||||
};
|
||||
|
||||
@ -14,6 +14,7 @@ const multimediaController = require('./multimedia.controller');
|
||||
|
||||
|
||||
routes.get('/multimedias', //cacheSuccesses('24 hours'),
|
||||
isLoggedUser,
|
||||
PaginateMiddleware.middleware(),
|
||||
//SortMiddleware.middleware({ default: "init_available_date" }),
|
||||
multimediaController.find({
|
||||
@ -22,6 +23,7 @@ routes.get('/multimedias', //cacheSuccesses('24 hours'),
|
||||
);
|
||||
|
||||
routes.get('/multimedias/:id', //cacheSuccesses('24 hours'),
|
||||
isLoggedUser,
|
||||
//PaginateMiddleware.middleware(),
|
||||
//SortMiddleware.middleware({ default: "init_available_date" }),
|
||||
multimediaController.findOne({
|
||||
@ -30,16 +32,6 @@ routes.get('/multimedias/:id', //cacheSuccesses('24 hours'),
|
||||
);
|
||||
|
||||
|
||||
routes.get('/multimedias/:entityId',
|
||||
//PaginateMiddleware.middleware(),
|
||||
//SortMiddleware.middleware({ default: "init_available_date" }),
|
||||
multimediaController.find({})
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//routes.get('/venues', true, SortMiddleware.middleware({ default: "name" }), venueController.find);
|
||||
//routes.get('/venues', isLoggedUser, SortMiddleware.middleware({ default: "name" }), venueController.find);
|
||||
//routes.get('/venues/:id', isLoggedUser, venueController.findOne);
|
||||
|
||||
@ -84,7 +84,7 @@ module.exports = function (sequelize, DataTypes) {
|
||||
// OJO GENERA UN FOREIGN KEY Con eventos y habrá ID de otras entidades que no exitan en la tabla eventos, porque son post o speakers
|
||||
Speaker.Multimedias = Speaker.hasMany(models.Multimedia, {
|
||||
foreignKey: 'entityId',
|
||||
as: { singular: 'multimedia', plural: 'multimedias' }
|
||||
as: { singular: 'multimedia', plural: 'multimedias' },
|
||||
});
|
||||
|
||||
Speaker.Comments = Speaker.hasMany(models.Comment, {
|
||||
|
||||
@ -97,6 +97,7 @@ routes.get('/speakers/:id/:association',
|
||||
// Todos los ponentes
|
||||
routes.get('/admin/speakers',
|
||||
isAdministratorUser,
|
||||
SortMiddleware.middleware({ default: "name" }),
|
||||
speakerController.find({
|
||||
scopes: ['defaultScope', 'includeValues', 'includeMultimedias'],
|
||||
})
|
||||
@ -120,7 +121,7 @@ routes.get('/admin/speakers/:id/comments',
|
||||
speakerController.find()
|
||||
);
|
||||
|
||||
/*routes.get('/speakers/:id/values',
|
||||
routes.get('/admin/speakers/:id/values',
|
||||
isAdministratorUser,
|
||||
(req, res, next) => {
|
||||
req.params.association = 'values';
|
||||
@ -129,31 +130,38 @@ routes.get('/admin/speakers/:id/comments',
|
||||
speakerController.find()
|
||||
);
|
||||
|
||||
routes.get('/speakers/:id/questions',
|
||||
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('/speakers/:id',
|
||||
routes.post('/admin/speakers/:id',
|
||||
isAdministratorUser,
|
||||
speakerController.create()
|
||||
);
|
||||
|
||||
// Modificar ponente
|
||||
routes.put('/speakers/:id',
|
||||
routes.put('/admin/speakers/:id',
|
||||
isAdministratorUser,
|
||||
speakerController.update()
|
||||
);
|
||||
|
||||
// Borrar ponente
|
||||
routes.delete('/speakers/:id',
|
||||
routes.delete('/admin/speakers/:id',
|
||||
isAdministratorUser,
|
||||
speakerController.delete()
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user