mirror of
https://github.com/strapi/strapi.git
synced 2025-11-15 17:49:57 +00:00
Cleanup old graphql code
Signed-off-by: Alexandre Bodin <bodin.alex@gmail.com>
This commit is contained in:
parent
3ce852af61
commit
f1cbc014da
@ -9,8 +9,7 @@ const pluralize = require('pluralize');
|
||||
const { convertRestQueryParams, buildQuery } = require('strapi-utils');
|
||||
|
||||
const Schema = require('./Schema.js');
|
||||
const GraphQLQuery = require('./Query.js');
|
||||
/* eslint-disable no-unused-vars */
|
||||
const { convertToParams, convertToQuery } = require('./utils');
|
||||
|
||||
/**
|
||||
* Returns all fields of type primitive
|
||||
@ -86,7 +85,7 @@ const fieldResolver = (field, key) => {
|
||||
return object => {
|
||||
const resolver =
|
||||
field.resolve ||
|
||||
function resolver(obj, options, context) {
|
||||
function resolver(obj) {
|
||||
// eslint-disable-line no-unused-vars
|
||||
return obj[key];
|
||||
};
|
||||
@ -179,8 +178,8 @@ const createAggregationFieldsResolver = function(
|
||||
fields,
|
||||
async (obj, options, context, fieldResolver, fieldKey) => {
|
||||
const filters = convertRestQueryParams({
|
||||
...GraphQLQuery.convertToParams(_.omit(obj, 'where')),
|
||||
...GraphQLQuery.convertToQuery(obj.where),
|
||||
...convertToParams(_.omit(obj, 'where')),
|
||||
...convertToQuery(obj.where),
|
||||
});
|
||||
|
||||
return buildQuery({ model, filters, aggregate: true })
|
||||
@ -198,7 +197,7 @@ const createAggregationFieldsResolver = function(
|
||||
/**
|
||||
* Correctly format the data returned by the group by
|
||||
*/
|
||||
const preProcessGroupByData = function({ result, fieldKey, filters, model }) {
|
||||
const preProcessGroupByData = function({ result, fieldKey, filters }) {
|
||||
const _result = _.toArray(result);
|
||||
return _.map(_result, value => {
|
||||
return {
|
||||
@ -237,7 +236,7 @@ const preProcessGroupByData = function({ result, fieldKey, filters, model }) {
|
||||
* email: function emailResolver() { .... }
|
||||
* }
|
||||
*/
|
||||
const createGroupByFieldsResolver = function(model, fields, name) {
|
||||
const createGroupByFieldsResolver = function(model, fields) {
|
||||
const resolver = async (
|
||||
filters,
|
||||
options,
|
||||
@ -246,8 +245,8 @@ const createGroupByFieldsResolver = function(model, fields, name) {
|
||||
fieldKey
|
||||
) => {
|
||||
const params = {
|
||||
...GraphQLQuery.convertToParams(_.omit(filters, 'where')),
|
||||
...GraphQLQuery.convertToQuery(filters.where),
|
||||
...convertToParams(_.omit(filters, 'where')),
|
||||
...convertToQuery(filters.where),
|
||||
};
|
||||
|
||||
const result = await buildQuery({
|
||||
@ -262,7 +261,6 @@ const createGroupByFieldsResolver = function(model, fields, name) {
|
||||
result,
|
||||
fieldKey,
|
||||
filters,
|
||||
model,
|
||||
});
|
||||
};
|
||||
|
||||
@ -296,7 +294,7 @@ const generateConnectionFieldsTypes = function(fields, model) {
|
||||
.join('\n\n');
|
||||
};
|
||||
|
||||
const formatConnectionGroupBy = function(fields, model, name) {
|
||||
const formatConnectionGroupBy = function(fields, model) {
|
||||
const { globalId } = model;
|
||||
const groupByGlobalId = `${globalId}GroupBy`;
|
||||
|
||||
@ -318,11 +316,7 @@ const formatConnectionGroupBy = function(fields, model, name) {
|
||||
globalId: groupByGlobalId,
|
||||
type: groupByTypes,
|
||||
resolver: {
|
||||
[groupByGlobalId]: createGroupByFieldsResolver(
|
||||
model,
|
||||
groupByFields,
|
||||
name
|
||||
),
|
||||
[groupByGlobalId]: createGroupByFieldsResolver(model, groupByFields),
|
||||
},
|
||||
};
|
||||
};
|
||||
@ -354,8 +348,8 @@ const formatConnectionAggregator = function(fields, model, modelName) {
|
||||
|
||||
let resolvers = {
|
||||
[aggregatorGlobalId]: {
|
||||
count(obj, options, context) {
|
||||
const opts = GraphQLQuery.convertToQuery(obj.where);
|
||||
count(obj) {
|
||||
const opts = convertToQuery(obj.where);
|
||||
|
||||
if (opts._q) {
|
||||
// allow search param
|
||||
@ -363,7 +357,7 @@ const formatConnectionAggregator = function(fields, model, modelName) {
|
||||
}
|
||||
return strapi.query(modelName, model.plugin).count(opts);
|
||||
},
|
||||
totalCount(obj, options, context) {
|
||||
totalCount() {
|
||||
return strapi.query(modelName, model.plugin).count({});
|
||||
},
|
||||
},
|
||||
@ -372,7 +366,7 @@ const formatConnectionAggregator = function(fields, model, modelName) {
|
||||
// Only add the aggregator's operations types and resolver if there are some numeric fields
|
||||
if (!_.isEmpty(numericFields)) {
|
||||
// Returns the actual object and handle aggregation in the query resolvers
|
||||
const defaultAggregatorFunc = (obj, options, context) => {
|
||||
const defaultAggregatorFunc = obj => {
|
||||
// eslint-disable-line no-unused-vars
|
||||
return obj;
|
||||
};
|
||||
@ -471,19 +465,13 @@ const formatConnectionAggregator = function(fields, model, modelName) {
|
||||
* }
|
||||
*
|
||||
*/
|
||||
const formatModelConnectionsGQL = function({
|
||||
fields,
|
||||
model,
|
||||
name,
|
||||
resolver,
|
||||
plugin,
|
||||
}) {
|
||||
const formatModelConnectionsGQL = function({ fields, model, name, resolver }) {
|
||||
const { globalId } = model;
|
||||
|
||||
const connectionGlobalId = `${globalId}Connection`;
|
||||
|
||||
const aggregatorFormat = formatConnectionAggregator(fields, model, name);
|
||||
const groupByFormat = formatConnectionGroupBy(fields, model, name);
|
||||
const groupByFormat = formatConnectionGroupBy(fields, model);
|
||||
const connectionFields = {
|
||||
values: `[${globalId}]`,
|
||||
groupBy: `${globalId}GroupBy`,
|
||||
@ -518,7 +506,7 @@ const formatModelConnectionsGQL = function({
|
||||
Query: {
|
||||
[connectionQueryName]: Schema.buildQuery(connectionQueryName, {
|
||||
resolverOf: resolver.resolverOf || resolver.resolver,
|
||||
resolver(obj, options, { context }) {
|
||||
resolver(obj, options) {
|
||||
return options;
|
||||
},
|
||||
}),
|
||||
@ -527,10 +515,10 @@ const formatModelConnectionsGQL = function({
|
||||
values(obj, options, gqlCtx) {
|
||||
return connectionResolver(obj, obj, gqlCtx);
|
||||
},
|
||||
groupBy(obj, options, context) {
|
||||
groupBy(obj) {
|
||||
return obj;
|
||||
},
|
||||
aggregate(obj, options, context) {
|
||||
aggregate(obj) {
|
||||
return obj;
|
||||
},
|
||||
},
|
||||
|
||||
@ -11,11 +11,15 @@ const _ = require('lodash');
|
||||
const DynamicZoneScalar = require('../types/dynamiczoneScalar');
|
||||
|
||||
const Aggregator = require('./Aggregator');
|
||||
const Query = require('./Query.js');
|
||||
const Types = require('./Types.js');
|
||||
const Schema = require('./Schema.js');
|
||||
const {
|
||||
mergeSchemas,
|
||||
convertToParams,
|
||||
convertToQuery,
|
||||
amountLimiting,
|
||||
} = require('./utils');
|
||||
const { toSingular, toPlural } = require('./naming');
|
||||
const { mergeSchemas } = require('./utils');
|
||||
|
||||
const isQueryEnabled = (schema, name) => {
|
||||
return _.get(schema, ['resolver', 'Query', name]) !== false;
|
||||
@ -181,11 +185,11 @@ const buildAssocResolvers = model => {
|
||||
obj[association.alias]
|
||||
);
|
||||
} else {
|
||||
const queryParams = Query.amountLimiting(options);
|
||||
const queryParams = amountLimiting(options);
|
||||
queryOpts = {
|
||||
...queryOpts,
|
||||
...Query.convertToParams(_.omit(queryParams, 'where')), // Convert filters (sort, limit and start/skip)
|
||||
...Query.convertToQuery(queryParams.where),
|
||||
...convertToParams(_.omit(queryParams, 'where')), // Convert filters (sort, limit and start/skip)
|
||||
...convertToQuery(queryParams.where),
|
||||
};
|
||||
|
||||
if (
|
||||
|
||||
@ -11,7 +11,14 @@ const _ = require('lodash');
|
||||
const graphql = require('graphql');
|
||||
const Types = require('./Types.js');
|
||||
const Resolvers = require('./Resolvers.js');
|
||||
const { mergeSchemas, createDefaultSchema, diffResolvers } = require('./utils');
|
||||
const {
|
||||
mergeSchemas,
|
||||
createDefaultSchema,
|
||||
diffResolvers,
|
||||
convertToParams,
|
||||
convertToQuery,
|
||||
amountLimiting,
|
||||
} = require('./utils');
|
||||
|
||||
const policyUtils = require('strapi-utils').policy;
|
||||
const compose = require('koa-compose');
|
||||
@ -288,7 +295,6 @@ const buildResolvers = resolvers => {
|
||||
}, {});
|
||||
};
|
||||
|
||||
// TODO: implement
|
||||
const buildMutation = (mutationName, config) => {
|
||||
const { resolver, resolverOf, transformOutput = _.identity } = config;
|
||||
|
||||
@ -432,45 +438,6 @@ const buildQueryContext = ({ options, graphqlContext }) => {
|
||||
return { ctx, opts };
|
||||
};
|
||||
|
||||
const convertToParams = params => {
|
||||
return Object.keys(params).reduce((acc, current) => {
|
||||
const key = current === 'id' ? 'id' : `_${current}`;
|
||||
acc[key] = params[current];
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
const convertToQuery = params => {
|
||||
const result = {};
|
||||
|
||||
_.forEach(params, (value, key) => {
|
||||
if (_.isPlainObject(value)) {
|
||||
const flatObject = convertToQuery(value);
|
||||
_.forEach(flatObject, (_value, _key) => {
|
||||
result[`${key}.${_key}`] = _value;
|
||||
});
|
||||
} else {
|
||||
result[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
const amountLimiting = (params = {}) => {
|
||||
const { amountLimit } = strapi.plugins.graphql.config;
|
||||
|
||||
if (!amountLimit) return params;
|
||||
|
||||
if (!params.limit || params.limit === -1 || params.limit > amountLimit) {
|
||||
params.limit = amountLimit;
|
||||
} else if (params.limit < 0) {
|
||||
params.limit = 0;
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
|
||||
const getAction = resolver => {
|
||||
if (!_.isString(resolver)) {
|
||||
throw new Error(`Error building query. Expected a string, got ${resolver}`);
|
||||
|
||||
@ -40,8 +40,50 @@ const diffResolvers = (object, base) => {
|
||||
return newObj;
|
||||
};
|
||||
|
||||
const convertToParams = params => {
|
||||
return Object.keys(params).reduce((acc, current) => {
|
||||
const key = current === 'id' ? 'id' : `_${current}`;
|
||||
acc[key] = params[current];
|
||||
return acc;
|
||||
}, {});
|
||||
};
|
||||
|
||||
const convertToQuery = params => {
|
||||
const result = {};
|
||||
|
||||
_.forEach(params, (value, key) => {
|
||||
if (_.isPlainObject(value)) {
|
||||
const flatObject = convertToQuery(value);
|
||||
_.forEach(flatObject, (_value, _key) => {
|
||||
result[`${key}.${_key}`] = _value;
|
||||
});
|
||||
} else {
|
||||
result[key] = value;
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
const amountLimiting = (params = {}) => {
|
||||
const { amountLimit } = strapi.plugins.graphql.config;
|
||||
|
||||
if (!amountLimit) return params;
|
||||
|
||||
if (!params.limit || params.limit === -1 || params.limit > amountLimit) {
|
||||
params.limit = amountLimit;
|
||||
} else if (params.limit < 0) {
|
||||
params.limit = 0;
|
||||
}
|
||||
|
||||
return params;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
diffResolvers,
|
||||
mergeSchemas,
|
||||
createDefaultSchema,
|
||||
convertToParams,
|
||||
convertToQuery,
|
||||
amountLimiting,
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user