103 lines
3.1 KiB
JavaScript
103 lines
3.1 KiB
JavaScript
|
|
import { GraphQLNonNull } from 'graphql';
|
||
|
|
import getFieldNames from 'graphql-list-fields';
|
||
|
|
import * as defaultGraphQLTypes from './defaultGraphQLTypes';
|
||
|
|
import * as objectsQueries from './objectsQueries';
|
||
|
|
import * as parseClassTypes from './parseClassTypes';
|
||
|
|
|
||
|
|
const load = (parseGraphQLSchema, parseClass) => {
|
||
|
|
const className = parseClass.className;
|
||
|
|
|
||
|
|
const {
|
||
|
|
classGraphQLOutputType,
|
||
|
|
classGraphQLFindArgs,
|
||
|
|
classGraphQLFindResultType,
|
||
|
|
} = parseGraphQLSchema.parseClassTypes[className];
|
||
|
|
|
||
|
|
const getGraphQLQueryName = `get${className}`;
|
||
|
|
parseGraphQLSchema.graphQLObjectsQueries[getGraphQLQueryName] = {
|
||
|
|
description: `The ${getGraphQLQueryName} query can be used to get an object of the ${className} class by its id.`,
|
||
|
|
args: {
|
||
|
|
objectId: defaultGraphQLTypes.OBJECT_ID_ATT,
|
||
|
|
readPreference: defaultGraphQLTypes.READ_PREFERENCE_ATT,
|
||
|
|
includeReadPreference: defaultGraphQLTypes.INCLUDE_READ_PREFERENCE_ATT,
|
||
|
|
},
|
||
|
|
type: new GraphQLNonNull(classGraphQLOutputType),
|
||
|
|
async resolve(_source, args, context, queryInfo) {
|
||
|
|
try {
|
||
|
|
const { objectId, readPreference, includeReadPreference } = args;
|
||
|
|
const { config, auth, info } = context;
|
||
|
|
const selectedFields = getFieldNames(queryInfo);
|
||
|
|
|
||
|
|
const { keys, include } = parseClassTypes.extractKeysAndInclude(
|
||
|
|
selectedFields
|
||
|
|
);
|
||
|
|
|
||
|
|
return await objectsQueries.getObject(
|
||
|
|
className,
|
||
|
|
objectId,
|
||
|
|
keys,
|
||
|
|
include,
|
||
|
|
readPreference,
|
||
|
|
includeReadPreference,
|
||
|
|
config,
|
||
|
|
auth,
|
||
|
|
info
|
||
|
|
);
|
||
|
|
} catch (e) {
|
||
|
|
parseGraphQLSchema.handleError(e);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
};
|
||
|
|
|
||
|
|
const findGraphQLQueryName = `find${className}`;
|
||
|
|
parseGraphQLSchema.graphQLObjectsQueries[findGraphQLQueryName] = {
|
||
|
|
description: `The ${findGraphQLQueryName} query can be used to find objects of the ${className} class.`,
|
||
|
|
args: classGraphQLFindArgs,
|
||
|
|
type: new GraphQLNonNull(classGraphQLFindResultType),
|
||
|
|
async resolve(_source, args, context, queryInfo) {
|
||
|
|
try {
|
||
|
|
const {
|
||
|
|
where,
|
||
|
|
order,
|
||
|
|
skip,
|
||
|
|
limit,
|
||
|
|
readPreference,
|
||
|
|
includeReadPreference,
|
||
|
|
subqueryReadPreference,
|
||
|
|
} = args;
|
||
|
|
const { config, auth, info } = context;
|
||
|
|
const selectedFields = getFieldNames(queryInfo);
|
||
|
|
|
||
|
|
const { keys, include } = parseClassTypes.extractKeysAndInclude(
|
||
|
|
selectedFields
|
||
|
|
.filter(field => field.includes('.'))
|
||
|
|
.map(field => field.slice(field.indexOf('.') + 1))
|
||
|
|
);
|
||
|
|
const parseOrder = order && order.join(',');
|
||
|
|
|
||
|
|
return await objectsQueries.findObjects(
|
||
|
|
className,
|
||
|
|
where,
|
||
|
|
parseOrder,
|
||
|
|
skip,
|
||
|
|
limit,
|
||
|
|
keys,
|
||
|
|
include,
|
||
|
|
false,
|
||
|
|
readPreference,
|
||
|
|
includeReadPreference,
|
||
|
|
subqueryReadPreference,
|
||
|
|
config,
|
||
|
|
auth,
|
||
|
|
info,
|
||
|
|
selectedFields.map(field => field.split('.', 1)[0])
|
||
|
|
);
|
||
|
|
} catch (e) {
|
||
|
|
parseGraphQLSchema.handleError(e);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
};
|
||
|
|
};
|
||
|
|
|
||
|
|
export { load };
|