GraphQL DX: Relation/Pointer (#5946)
* Add a test on deep complex GraphQL Query * Relation/Pointer new DX + deep nested mutations * Fix lint * Review * Remove unnecessary code * Fix objectId on update
This commit is contained in:
committed by
Antonio Davi Macedo Coelho de Castro
parent
89e8868a85
commit
5b3a492965
@@ -1,17 +1,15 @@
|
||||
import { GraphQLNonNull } from 'graphql';
|
||||
import getFieldNames from 'graphql-list-fields';
|
||||
import * as defaultGraphQLTypes from './defaultGraphQLTypes';
|
||||
import { extractKeysAndInclude } from '../parseGraphQLUtils';
|
||||
import {
|
||||
extractKeysAndInclude,
|
||||
getParseClassMutationConfig,
|
||||
} from '../parseGraphQLUtils';
|
||||
import * as objectsMutations from './objectsMutations';
|
||||
import * as objectsQueries from './objectsQueries';
|
||||
import { ParseGraphQLClassConfig } from '../../Controllers/ParseGraphQLController';
|
||||
import { transformClassNameToGraphQL } from '../transformers/className';
|
||||
|
||||
const getParseClassMutationConfig = function(
|
||||
parseClassConfig: ?ParseGraphQLClassConfig
|
||||
) {
|
||||
return (parseClassConfig && parseClassConfig.mutation) || {};
|
||||
};
|
||||
import { transformTypes } from '../transformers/mutation';
|
||||
|
||||
const getOnlyRequiredFields = (
|
||||
updatedFields,
|
||||
@@ -55,43 +53,6 @@ const load = function(
|
||||
classGraphQLOutputType,
|
||||
} = parseGraphQLSchema.parseClassTypes[className];
|
||||
|
||||
const transformTypes = (inputType: 'create' | 'update', fields) => {
|
||||
if (fields) {
|
||||
const classGraphQLCreateTypeFields =
|
||||
isCreateEnabled && classGraphQLCreateType
|
||||
? classGraphQLCreateType.getFields()
|
||||
: null;
|
||||
const classGraphQLUpdateTypeFields =
|
||||
isUpdateEnabled && classGraphQLUpdateType
|
||||
? classGraphQLUpdateType.getFields()
|
||||
: null;
|
||||
Object.keys(fields).forEach(field => {
|
||||
let inputTypeField;
|
||||
if (inputType === 'create' && classGraphQLCreateTypeFields) {
|
||||
inputTypeField = classGraphQLCreateTypeFields[field];
|
||||
} else if (classGraphQLUpdateTypeFields) {
|
||||
inputTypeField = classGraphQLUpdateTypeFields[field];
|
||||
}
|
||||
if (inputTypeField) {
|
||||
switch (inputTypeField.type) {
|
||||
case defaultGraphQLTypes.GEO_POINT_INPUT:
|
||||
fields[field].__type = 'GeoPoint';
|
||||
break;
|
||||
case defaultGraphQLTypes.POLYGON_INPUT:
|
||||
fields[field] = {
|
||||
__type: 'Polygon',
|
||||
coordinates: fields[field].map(geoPoint => [
|
||||
geoPoint.latitude,
|
||||
geoPoint.longitude,
|
||||
]),
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
if (isCreateEnabled) {
|
||||
const createGraphQLMutationName = `create${graphQLClassName}`;
|
||||
parseGraphQLSchema.addGraphQLMutation(createGraphQLMutationName, {
|
||||
@@ -110,10 +71,16 @@ const load = function(
|
||||
let { fields } = args;
|
||||
if (!fields) fields = {};
|
||||
const { config, auth, info } = context;
|
||||
transformTypes('create', fields);
|
||||
|
||||
const parseFields = await transformTypes('create', fields, {
|
||||
className,
|
||||
parseGraphQLSchema,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
|
||||
const createdObject = await objectsMutations.createObject(
|
||||
className,
|
||||
fields,
|
||||
parseFields,
|
||||
config,
|
||||
auth,
|
||||
info
|
||||
@@ -172,12 +139,16 @@ const load = function(
|
||||
const { objectId, fields } = args;
|
||||
const { config, auth, info } = context;
|
||||
|
||||
transformTypes('update', fields);
|
||||
const parseFields = await transformTypes('update', fields, {
|
||||
className,
|
||||
parseGraphQLSchema,
|
||||
req: { config, auth, info },
|
||||
});
|
||||
|
||||
const updatedObject = await objectsMutations.updateObject(
|
||||
className,
|
||||
objectId,
|
||||
fields,
|
||||
parseFields,
|
||||
config,
|
||||
auth,
|
||||
info
|
||||
@@ -205,7 +176,12 @@ const load = function(
|
||||
info
|
||||
);
|
||||
}
|
||||
return { ...updatedObject, ...fields, ...optimizedObject };
|
||||
return {
|
||||
objectId: objectId,
|
||||
...updatedObject,
|
||||
...fields,
|
||||
...optimizedObject,
|
||||
};
|
||||
} catch (e) {
|
||||
parseGraphQLSchema.handleError(e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user