171 lines
4.0 KiB
JavaScript
Raw Normal View History

2016-03-18 11:12:50 +01:00
'use strict';
/**
* Module dependencies
*/
// Public node modules.
const _ = require('lodash');
// Strapi helper for GraphQL.
const helpers = require('strapi/lib/configuration/hooks/graphql/helpers/');
2016-04-19 17:29:19 +02:00
const utils = require('./');
2016-03-18 11:12:50 +01:00
/**
* Utils functions for BookShelf
*/
module.exports = {
/**
* Get collection identity
*
* @return {String}
*/
getCollectionIdentity: function (collection) {
return _.capitalize(collection.forge().tableName);
},
/**
* Fetch one record
*
* @return {Object}
*/
2016-04-04 22:09:19 +02:00
fetch: function (collectionIdentity, collection, criteria) {
2016-03-18 11:12:50 +01:00
return collection.forge(criteria)
.fetch({withRelated: helpers.getAssociationsByIdentity(collectionIdentity)})
.then(function (data) {
return _.isEmpty(data) ? data : data.toJSON();
});
},
/**
* Fetch all records
*
* @return {Array}
*/
2016-04-04 22:09:19 +02:00
fetchAll: function (collectionIdentity, collection, criteria) {
2016-03-18 11:12:50 +01:00
const filters = _.omit(helpers.handleFilters(criteria), function (value) {
return _.isUndefined(value) || _.isNumber(value) ? _.isNull(value) : _.isEmpty(value);
});
return collection.forge()
.query(filters)
.fetchAll({withRelated: helpers.getAssociationsByIdentity(collectionIdentity)})
.then(function (data) {
return data.toJSON() || data;
});
},
/**
* Fetch latests records based on criteria
*
* @return {Array}
*/
fetchLatest: function (collectionIdentity, collection, criteria) {
const filters = _.omit(helpers.handleFilters(criteria), function (value) {
return _.isUndefined(value) || _.isNumber(value) ? _.isNull(value) : _.isEmpty(value);
});
// Handle filters
filters.orderBy = 'createdAt DESC';
filters.limit = filters.count;
delete filters.count;
return collection.forge(criteria)
.query(filters)
.fetchAll({withRelated: helpers.getAssociationsByIdentity(collectionIdentity)})
.then(function (data) {
return data.toJSON() || data;
});
},
/**
* Fetch first records based on criteria
*
* @return {Array}
*/
fetchFirst: function (collectionIdentity, collection, criteria) {
const filters = _.omit(helpers.handleFilters(criteria), function (value) {
return _.isUndefined(value) || _.isNumber(value) ? _.isNull(value) : _.isEmpty(value);
});
// Handle filters
filters.orderBy = 'createdAt ASC';
filters.limit = filters.count;
delete filters.count;
return collection.forge(criteria)
.query(filters)
.fetchAll({withRelated: helpers.getAssociationsByIdentity(collectionIdentity)})
.then(function (data) {
return data.toJSON() || data;
});
},
/**
* Create record
*
* @return {Object}
*/
create: function (collectionIdentity, rootValue, args) {
return strapi.services[collectionIdentity.toLowerCase()]
.add(rootValue.context.request.body)
.then(function (data) {
2016-04-04 22:09:19 +02:00
return _.isFunction(_.get(data, 'toJSON')) ? data.toJSON() : data;
2016-03-18 11:12:50 +01:00
});
},
/**
* Update record
*
* @return {Object}
*/
update: function (collectionIdentity, rootValue, args) {
_.merge(args, rootValue.context.request.body);
2016-04-19 17:29:19 +02:00
const PK = utils.getPK(collectionIdentity.toLowerCase(), null, strapi.models);
2016-03-18 11:12:50 +01:00
return strapi.services[collectionIdentity.toLowerCase()]
.edit(_.set({}, PK, args[PK]), _.omit(args, PK))
.then(function (data) {
return _.isFunction(_.get(data, 'toJSON')) ? data.toJSON() : data;
});
},
/**
* Delete record
*
* @return {Object}
*/
2016-04-04 22:09:19 +02:00
delete: function (collectionIdentity, rootValue, args) {
2016-03-18 11:12:50 +01:00
_.merge(args, rootValue.context.request.body);
return strapi.services[collectionIdentity.toLowerCase()]
.remove(args)
.then(function (data) {
return _.isFunction(_.get(data, 'toJSON')) ? data.toJSON() : data;
2016-04-04 22:09:19 +02:00
});
2016-03-18 11:12:50 +01:00
},
/**
* Count records
*
* @return {Array}
*/
count: function (collectionIdentity, collection) {
return collection.forge().count();
}
};