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