Add select attribute in blueprints

This commit is contained in:
Aurélien Georget 2016-02-02 16:15:21 +01:00
parent d3ce773ef9
commit ab4416c2b2
2 changed files with 26 additions and 2 deletions

View File

@ -21,8 +21,20 @@ module.exports = {
*/
populateEach: function (query, _ctx, model) {
const selectedAttributes = _.get(this.parseSelect(_ctx), 'select');
let shouldPopulate = strapi.config.blueprints.populate;
let aliasFilter = (_ctx.request.query && _ctx.request.query.populate) || (_ctx.request.body && _ctx.request.body.populate);
let associationToPopulate;
if (!_.isUndefined(selectedAttributes)) {
associationToPopulate = _.remove(_.map(model.associations, function (association) {
return _.includes(selectedAttributes, association.alias) ? association : undefined;
}), function (n) {
return !_.isUndefined(n);
});
} else {
associationToPopulate = model.associations;
}
// Convert the string representation of the filter list to an array. We
// need this to provide flexibility in the request param. This way both
@ -34,7 +46,7 @@ module.exports = {
aliasFilter = (aliasFilter) ? aliasFilter.split(',') : [];
}
return _(model.associations).reduce(function populateEachAssociation(query, association) {
return _(associationToPopulate).reduce(function populateEachAssociation(query, association) {
// If an alias filter was provided, override the blueprint config.
if (aliasFilter) {
@ -236,5 +248,17 @@ module.exports = {
skip = +skip;
}
return skip;
},
/**
* Parse select params.
*
* @param {Object} _ctx
*/
parseSelect: function (_ctx) {
_ctx.options = _ctx.options || {};
const select = _ctx.request.query.hasOwnProperty('select') ? _.pick(_ctx.request.query, 'select') : {};
return select;
}
};

View File

@ -23,7 +23,7 @@ module.exports = function find(_ctx) {
const Model = actionUtil.parseModel(_ctx);
// Init the query.
let query = Model.find()
let query = Model.find(actionUtil.parseSelect(_ctx))
.where(actionUtil.parseCriteria(_ctx))
.limit(actionUtil.parseLimit(_ctx))
.skip(actionUtil.parseSkip(_ctx))