From 1b722b2716c984d229fd0e44d6f8c99f55d427e1 Mon Sep 17 00:00:00 2001 From: Michael Graham <38390185+michaeldgraham@users.noreply.github.com> Date: Wed, 30 Sep 2020 14:55:42 -0700 Subject: [PATCH 1/3] initial documentation comments for generated api --- src/augment/ast.js | 18 +- src/augment/fields.js | 11 +- src/augment/types/node/mutation.js | 37 +- src/augment/types/node/query.js | 13 +- src/augment/types/relationship/mutation.js | 67 +- src/augment/types/relationship/query.js | 115 +- .../types/relationship/relationship.js | 3 +- src/augment/types/spatial.js | 2 +- src/augment/types/temporal.js | 2 +- src/augment/types/types.js | 148 +- test/unit/augmentSchemaTest.test.js | 10142 ++++++++-------- test/unit/configTest.test.js | 6 + 12 files changed, 5612 insertions(+), 4952 deletions(-) diff --git a/src/augment/ast.js b/src/augment/ast.js index a61e23fa..8b08e05a 100644 --- a/src/augment/ast.js +++ b/src/augment/ast.js @@ -192,11 +192,19 @@ export const buildDirectiveDefinition = ({ }; }; -export const buildDescription = ({ value, block = false }) => ({ - kind: Kind.STRING, - value, - block -}); +export const buildDescription = ({ value, block = false, config = {} }) => { + // If boolean and not false, then default is to generate documentation + if ( + typeof config.documentation !== 'boolean' || + config.documentation !== false + ) { + return { + kind: Kind.STRING, + value, + block + }; + } +}; export const buildSelectionSet = ({ selections = [] }) => { return { diff --git a/src/augment/fields.js b/src/augment/fields.js index bd9f630e..a2a83f15 100644 --- a/src/augment/fields.js +++ b/src/augment/fields.js @@ -6,7 +6,7 @@ import { OperationType } from './types/types'; import { OrderingArgument, buildPropertyOrderingValues } from './input-values'; -import { buildField, buildName, buildNamedType } from './ast'; +import { buildField, buildName, buildNamedType, buildDescription } from './ast'; /** * The name of the Neo4j system ID field @@ -194,7 +194,8 @@ export const buildNeo4jSystemIDField = ({ typeName, propertyOutputFields, nodeInputTypeMap, - config + config, + isRelationship = false }) => { const queryTypeNameLower = OperationType.QUERY.toLowerCase(); if (shouldAugmentType(config, queryTypeNameLower, typeName)) { @@ -207,10 +208,16 @@ export const buildNeo4jSystemIDField = ({ const systemIDIndex = propertyOutputFields.findIndex( e => e.name.value === Neo4jSystemIDField ); + let entityDescription = 'node'; + if (isRelationship) entityDescription = 'relationship'; const systemIDField = buildField({ name: buildName({ name: neo4jInternalIDConfig.name }), type: buildNamedType({ name: GraphQLString.name + }), + description: buildDescription({ + value: `Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this ${entityDescription}.`, + config }) }); if (systemIDIndex >= 0) { diff --git a/src/augment/types/node/mutation.js b/src/augment/types/node/mutation.js index 3afee062..3a9fdbbd 100644 --- a/src/augment/types/node/mutation.js +++ b/src/augment/types/node/mutation.js @@ -3,7 +3,8 @@ import { buildField, buildName, buildNamedType, - buildInputValue + buildInputValue, + buildDescription } from '../../ast'; import { DirectiveDefinition, @@ -32,6 +33,9 @@ const NodeMutation = { MERGE: 'Merge' }; +const GRANDSTACK_DOCS = `https://grandstack.io/docs`; +const GRANDSTACK_DOCS_SCHEMA_AUGMENTATION = `${GRANDSTACK_DOCS}/graphql-schema-generation-augmentation`; + /** * Given the results of augmentNodeTypeFields, builds or augments * the AST definitions of the Mutation operation fields and any @@ -84,7 +88,7 @@ export const augmentNodeMutationAPI = ({ */ const buildNodeMutationField = ({ mutationType, - mutationAction, + mutationAction = '', primaryKey, typeName, propertyInputValues, @@ -106,7 +110,7 @@ const buildNodeMutationField = ({ name: typeName }) ) { - const mutationField = { + const mutationConfig = { name: buildName({ name: mutationName }), args: buildNodeMutationArguments({ operationName: mutationAction, @@ -122,21 +126,38 @@ const buildNodeMutationField = ({ config }) }; + let mutationField = undefined; + let mutationDescriptionUrl = ''; if (mutationAction === NodeMutation.CREATE) { - mutationFields.push(buildField(mutationField)); + mutationField = mutationConfig; + mutationDescriptionUrl = + '[creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes)'; } else if (mutationAction === NodeMutation.UPDATE) { - if (primaryKey && mutationField.args.length > 1) { - mutationFields.push(buildField(mutationField)); + if (primaryKey && mutationConfig.args.length > 1) { + mutationField = mutationConfig; + mutationDescriptionUrl = + '[updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property)'; } } else if (mutationAction === NodeMutation.MERGE) { if (primaryKey) { - mutationFields.push(buildField(mutationField)); + mutationField = mutationConfig; + mutationDescriptionUrl = + '[merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived)'; } } else if (mutationAction === NodeMutation.DELETE) { if (primaryKey) { - mutationFields.push(buildField(mutationField)); + mutationField = mutationConfig; + mutationDescriptionUrl = + '[deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node)'; } } + if (mutationField) { + mutationField.description = buildDescription({ + value: `[Generated mutation](${GRANDSTACK_DOCS_SCHEMA_AUGMENTATION}/#${mutationAction.toLowerCase()}) for ${mutationDescriptionUrl} a ${typeName} node.`, + config + }); + mutationFields.push(buildField(mutationField)); + } operationTypeMap[OperationType.MUTATION].fields = mutationFields; } return operationTypeMap; diff --git a/src/augment/types/node/query.js b/src/augment/types/node/query.js index e46d7c71..4499e00c 100644 --- a/src/augment/types/node/query.js +++ b/src/augment/types/node/query.js @@ -4,7 +4,8 @@ import { buildField, buildInputValue, buildName, - buildNamedType + buildNamedType, + buildDescription } from '../../ast'; import { DirectiveDefinition, @@ -18,8 +19,7 @@ import { getFieldDefinition, getTypeExtensionFieldDefinition, isNeo4jIDField, - Neo4jSystemIDField, - isListTypeField + Neo4jSystemIDField } from '../../fields'; import { FilteringArgument, @@ -40,6 +40,9 @@ const NodeQueryArgument = { ...FilteringArgument }; +const GRANDSTACK_DOCS = `https://grandstack.io/docs`; +const GRANDSTACK_DOCS_GENERATED_QUERIES = `${GRANDSTACK_DOCS}/graphql-schema-generation-augmentation#generated-queries`; + /** * Given the results of augmentNodeTypeFields, builds or augments * the AST definition of the Query operation field and any @@ -190,6 +193,10 @@ const buildNodeQueryField = ({ directives: buildNodeQueryDirectives({ typeName, config + }), + description: buildDescription({ + value: `[Generated query](${GRANDSTACK_DOCS_GENERATED_QUERIES}) for ${typeName} type nodes.`, + config }) }) ); diff --git a/src/augment/types/relationship/mutation.js b/src/augment/types/relationship/mutation.js index dcf4afce..3336e3d7 100644 --- a/src/augment/types/relationship/mutation.js +++ b/src/augment/types/relationship/mutation.js @@ -1,5 +1,4 @@ import { RelationshipDirectionField } from './relationship'; -import { buildNodeOutputFields } from './query'; import { shouldAugmentRelationshipField } from '../../augment'; import { OperationType } from '../../types/types'; import { @@ -23,7 +22,8 @@ import { buildNamedType, buildField, buildObjectType, - buildInputObjectType + buildInputObjectType, + buildDescription } from '../../ast'; import { getPrimaryKey } from '../node/selection'; import { isExternalTypeExtension } from '../../../federation'; @@ -40,6 +40,10 @@ const RelationshipMutation = { MERGE: 'Merge' }; +const GRANDSTACK_DOCS = `https://grandstack.io/docs`; +const GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY = `${GRANDSTACK_DOCS}/graphql-relationship-types`; +const GRANDSTACK_DOCS_SCHEMA_AUGMENTATION = `${GRANDSTACK_DOCS}/graphql-schema-generation-augmentation`; + /** * Given the results of augmentRelationshipTypeFields, builds or * augments the AST definitions of the Mutation operation fields @@ -242,7 +246,8 @@ const buildRelationshipMutationAPI = ({ relationshipName, fromType, toType, - generatedTypeMap + generatedTypeMap, + config }); } return [operationTypeMap, generatedTypeMap]; @@ -272,6 +277,28 @@ const buildRelationshipMutationField = ({ propertyInputValues.length) || mutationAction === RelationshipMutation.MERGE ) { + let cypherDocUrl = ''; + let grandstackDocUrl = ''; + if (mutationAction === RelationshipMutation.CREATE) { + cypherDocUrl = + '[creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships)'; + grandstackDocUrl = '#add--remove-relationship'; + } + if (mutationAction === RelationshipMutation.DELETE) { + cypherDocUrl = + '[deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only)'; + grandstackDocUrl = '#add--remove-relationship'; + } + if (mutationAction === RelationshipMutation.UPDATE) { + cypherDocUrl = + '[updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property)'; + grandstackDocUrl = '#update-relationship'; + } + if (mutationAction === RelationshipMutation.MERGE) { + cypherDocUrl = + '[merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships)'; + grandstackDocUrl = '#merge-relationship'; + } operationTypeMap[OperationType.MUTATION].fields.push( buildField({ name: buildName({ @@ -293,6 +320,10 @@ const buildRelationshipMutationField = ({ fromType, toType, config + }), + description: buildDescription({ + value: `[Generated mutation](${GRANDSTACK_DOCS_SCHEMA_AUGMENTATION}/#${grandstackDocUrl.toLowerCase()}) for ${cypherDocUrl} the ${relationshipName} relationship.`, + config }) }) ); @@ -444,7 +475,8 @@ const buildRelationshipMutationOutputType = ({ relationshipName, fromType, toType, - generatedTypeMap + generatedTypeMap, + config }) => { if ( mutationAction === RelationshipMutation.CREATE || @@ -458,7 +490,32 @@ const buildRelationshipMutationOutputType = ({ fromType, toType }); - let fields = buildNodeOutputFields({ fromType, toType }); + let fields = [ + buildField({ + name: buildName({ + name: RelationshipDirectionField.FROM + }), + type: buildNamedType({ + name: fromType + }), + description: buildDescription({ + value: `Field for the ${fromType} node this ${relationshipName} [relationship](${GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY}) is coming from.`, + config + }) + }), + buildField({ + name: buildName({ + name: RelationshipDirectionField.TO + }), + type: buildNamedType({ + name: toType + }), + description: buildDescription({ + value: `Field for the ${toType} node this ${relationshipName} [relationship](${GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY}) is going to.`, + config + }) + }) + ]; if ( mutationAction === RelationshipMutation.CREATE || mutationAction === RelationshipMutation.UPDATE || diff --git a/src/augment/types/relationship/query.js b/src/augment/types/relationship/query.js index 0482a401..5c7676dc 100644 --- a/src/augment/types/relationship/query.js +++ b/src/augment/types/relationship/query.js @@ -18,10 +18,14 @@ import { buildName, buildNamedType, buildObjectType, - buildInputValue + buildInputValue, + buildDescription } from '../../ast'; import { isExternalTypeExtension } from '../../../federation'; +const GRANDSTACK_DOCS = `https://grandstack.io/docs`; +const GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY = `${GRANDSTACK_DOCS}/graphql-relationship-types`; + /** * An enum describing which arguments are implemented for * relationship type fields in the Query API @@ -68,7 +72,7 @@ export const augmentRelationshipQueryAPI = ({ typeExtensionDefinitionMap }); if (isImplementedField) typeName = definingType; - const relatedType = decideRelatedType({ + const [relatedType, relationDirection] = decideRelatedType({ typeName, definition, fromType, @@ -87,8 +91,10 @@ export const augmentRelationshipQueryAPI = ({ generatedTypeMap, config, relationshipName, + relationDirection, fieldType, - propertyOutputFields + propertyOutputFields, + config }); [ fieldArguments, @@ -167,7 +173,6 @@ const getTypeDefiningField = ({ * for the given field of the given relationship type */ const augmentRelationshipTypeFieldInput = ({ - definition, field, typeName, relatedType, @@ -295,8 +300,10 @@ const transformRelationshipTypeFieldOutput = ({ typeDefinitionMap, generatedTypeMap, relationshipName, + relationDirection, fieldType, - propertyOutputFields + propertyOutputFields, + config }) => { let relationshipOutputName = `_${typeName}${fieldName[0].toUpperCase() + fieldName.substr(1)}`; @@ -319,10 +326,12 @@ const transformRelationshipTypeFieldOutput = ({ fieldArguments, relationshipOutputName, relationshipName, + relationDirection, relatedType, propertyOutputFields, typeDefinitionMap, - generatedTypeMap + generatedTypeMap, + config }); return [fieldType, generatedTypeMap]; }; @@ -376,41 +385,6 @@ export const buildRelationshipFilters = ({ return filters; }; -/** - * Builds the AST definitions for the incoming and outgoing node type - * fields of the output object types generated for querying relationship - * type fields - */ -export const buildNodeOutputFields = ({ - fromType, - toType, - args = [], - wrappers = {} -}) => { - return [ - buildField({ - name: buildName({ - name: RelationshipDirectionField.FROM - }), - args, - type: buildNamedType({ - name: fromType, - wrappers - }) - }), - buildField({ - name: buildName({ - name: RelationshipDirectionField.TO - }), - args, - type: buildNamedType({ - name: toType, - wrappers - }) - }) - ]; -}; - /** * Builds the AST definitions for the object types generated * for querying relationship type fields on node types @@ -424,9 +398,11 @@ const buildRelationshipFieldOutputTypes = ({ relationshipOutputName, relationshipName, relatedType, + relationDirection, propertyOutputFields, typeDefinitionMap, - generatedTypeMap + generatedTypeMap, + config }) => { const relationTypeDirective = buildRelationDirective({ relationshipName, @@ -442,19 +418,50 @@ const buildRelationshipFieldOutputTypes = ({ typeDefinitionMap }); const reflexiveOutputName = `${relationshipOutputName}Directions`; - generatedTypeMap[reflexiveOutputName] = buildObjectType({ - name: buildName({ name: reflexiveOutputName }), - fields: buildNodeOutputFields({ - fromType: relationshipOutputName, - toType: relationshipOutputName, + const nodeOutputFields = [ + buildField({ + name: buildName({ + name: RelationshipDirectionField.FROM + }), args: fieldArguments, - wrappers: { - [TypeWrappers.LIST_TYPE]: true - } + type: buildNamedType({ + name: relationshipOutputName, + wrappers: { + [TypeWrappers.LIST_TYPE]: true + } + }), + description: buildDescription({ + value: `Field for the ${fromType} node this ${relationshipName} [relationship](${GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY}) is coming from.`, + config + }) }), + buildField({ + name: buildName({ + name: RelationshipDirectionField.TO + }), + args: fieldArguments, + type: buildNamedType({ + name: relationshipOutputName, + wrappers: { + [TypeWrappers.LIST_TYPE]: true + } + }), + description: buildDescription({ + value: `Field for the ${toType} node this ${relationshipName} [relationship](${GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY}) is going to.`, + config + }) + }) + ]; + generatedTypeMap[reflexiveOutputName] = buildObjectType({ + name: buildName({ name: reflexiveOutputName }), + fields: nodeOutputFields, directives: [relationTypeDirective] }); } + let descriptionValue = `Field for the ${toType} node this ${relationshipName} [relationship](${GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY}) is going to.`; + if (relationDirection === 'IN') { + descriptionValue = `Field for the ${fromType} node this ${relationshipName} [relationship](${GRANDSTACK_DOCS_RELATIONSHIP_TYPE_QUERY}) is coming from.`; + } generatedTypeMap[relationshipOutputName] = buildObjectType({ name: buildName({ name: relationshipOutputName }), fields: [ @@ -463,6 +470,10 @@ const buildRelationshipFieldOutputTypes = ({ name: buildName({ name: relatedType }), type: buildNamedType({ name: relatedType + }), + description: buildDescription({ + value: descriptionValue, + config }) }) ], @@ -555,12 +566,14 @@ const buildNodeInputFields = ({ fromType, toType }) => { */ const decideRelatedType = ({ typeName, fromType, toType }) => { let relatedType = toType; + let relationDirection = 'OUT'; if (fromType !== toType) { // Interpret relationship direction if (typeName === toType) { // Is incoming relationship relatedType = fromType; + relationDirection = 'IN'; } } - return relatedType; + return [relatedType, relationDirection]; }; diff --git a/src/augment/types/relationship/relationship.js b/src/augment/types/relationship/relationship.js index c5823420..979dfb12 100644 --- a/src/augment/types/relationship/relationship.js +++ b/src/augment/types/relationship/relationship.js @@ -246,7 +246,8 @@ const augmentRelationshipTypeFields = ({ typeName, propertyOutputFields, nodeInputTypeMap: relationshipInputTypeMap, - config + config, + isRelationship: true }); return [ fromTypeName, diff --git a/src/augment/types/spatial.js b/src/augment/types/spatial.js index 2102be97..157375b7 100644 --- a/src/augment/types/spatial.js +++ b/src/augment/types/spatial.js @@ -71,7 +71,7 @@ export const augmentSpatialTypes = ({ typeMap, config = {} }) => { return buildNeo4jTypes({ typeMap, neo4jTypes: SpatialType, - config: config.spatial + config }); }; diff --git a/src/augment/types/temporal.js b/src/augment/types/temporal.js index e2eff7c6..34635929 100644 --- a/src/augment/types/temporal.js +++ b/src/augment/types/temporal.js @@ -69,7 +69,7 @@ export const augmentTemporalTypes = ({ typeMap, config = {} }) => { return buildNeo4jTypes({ typeMap, neo4jTypes: TemporalType, - config: config.temporal + config }); }; diff --git a/src/augment/types/types.js b/src/augment/types/types.js index 4a754c2b..446cb01d 100644 --- a/src/augment/types/types.js +++ b/src/augment/types/types.js @@ -21,7 +21,8 @@ import { buildObjectType, buildInputObjectType, buildInputValue, - buildField + buildField, + buildDescription } from '../ast'; import { TemporalType, @@ -35,7 +36,8 @@ import { isNeo4jTypeField, unwrapNamedType, getFieldDefinition, - isTemporalField + isTemporalField, + isSpatialField } from '../fields'; import { augmentNodeType, augmentNodeTypeFields } from './node/node'; import { RelationshipDirectionField } from '../types/relationship/relationship'; @@ -94,6 +96,9 @@ export const Neo4jDataType = { } }; +const CYPHER_MANUAL_CURRENT_FUNCTIONS = `https://neo4j.com/docs/cypher-manual/current/functions`; +const GRANDSTACK_DOCS = `https://grandstack.io/docs`; + /** * A predicate function for identifying a Document AST resulting * from the parsing of SDL type definitions @@ -409,42 +414,42 @@ export const buildNeo4jTypes = ({ }) => { Object.values(neo4jTypes).forEach(typeName => { const typeNameLower = typeName.toLowerCase(); - if (config[typeNameLower] === true) { - const fields = buildNeo4jTypeFields({ typeName }); - let inputFields = []; - let outputFields = []; - fields.forEach(([fieldName, fieldType]) => { - const fieldNameLower = fieldName.toLowerCase(); - const fieldConfig = { - name: buildName({ name: fieldNameLower }), - type: buildNamedType({ - name: fieldType - }) - }; - inputFields.push(buildInputValue(fieldConfig)); - outputFields.push(buildField(fieldConfig)); + if ( + config.temporal[typeNameLower] === true || + config.spatial[typeNameLower] === true + ) { + const [inputFields, outputFields] = buildNeo4jTypeFields({ + typeName, + config }); - const formattedFieldConfig = { - name: buildName({ - name: Neo4jTypeFormatted.FORMATTED - }), - type: buildNamedType({ - name: GraphQLString.name - }) - }; - if (isTemporalField({ type: typeName })) { - inputFields.push(buildInputValue(formattedFieldConfig)); - outputFields.push(buildField(formattedFieldConfig)); + // decide some categorical labels used in dynamically generated descriptions + let cypherCategory = 'Temporal'; + let usingOutputDocUrl = `${GRANDSTACK_DOCS}/graphql-temporal-types-datetime#using-temporal-fields-in-queries`; + let usingInputDocUrl = `${GRANDSTACK_DOCS}/graphql-temporal-types-datetime/#temporal-query-arguments`; + if (isSpatialField({ type: typeName })) { + cypherCategory = 'Spatial'; + usingOutputDocUrl = `${GRANDSTACK_DOCS}/graphql-spatial-types#using-point-in-queries`; + usingInputDocUrl = `${GRANDSTACK_DOCS}/graphql-spatial-types/#point-query-arguments`; } - const objectTypeName = `${Neo4jTypeName}${typeName}`; - const inputTypeName = `${objectTypeName}Input`; - typeMap[objectTypeName] = buildObjectType({ - name: buildName({ name: objectTypeName }), - fields: outputFields - }); + const neo4jTypeName = `${Neo4jTypeName}${typeName}`; + // input object type + const inputTypeName = `${neo4jTypeName}Input`; typeMap[inputTypeName] = buildInputObjectType({ name: buildName({ name: inputTypeName }), - fields: inputFields + fields: inputFields, + description: buildDescription({ + value: `Generated ${typeName} input object for Neo4j [${cypherCategory} field arguments](${usingInputDocUrl}).`, + config + }) + }); + // output object type + typeMap[neo4jTypeName] = buildObjectType({ + name: buildName({ name: neo4jTypeName }), + fields: outputFields, + description: buildDescription({ + value: `Generated ${typeName} object type for Neo4j [${cypherCategory} fields](${usingOutputDocUrl}).`, + config + }) }); } }); @@ -456,32 +461,89 @@ export const buildNeo4jTypes = ({ * definitions used by a given Neo4j type, built into AST by * buildNeo4jTypes, then used in buildNeo4jType */ -const buildNeo4jTypeFields = ({ typeName = '' }) => { - let fields = []; +const buildNeo4jTypeFields = ({ typeName = '', config }) => { + let fieldConfigs = []; if (typeName === TemporalType.DATE) { - fields = Object.entries(Neo4jDate); + fieldConfigs = Object.entries(Neo4jDate); } else if (typeName === TemporalType.TIME) { - fields = Object.entries(Neo4jTime); + fieldConfigs = Object.entries(Neo4jTime); } else if (typeName === TemporalType.LOCALTIME) { - fields = Object.entries({ + fieldConfigs = Object.entries({ ...Neo4jTime }).filter(([name]) => name !== Neo4jTimeField.TIMEZONE); } else if (typeName === TemporalType.DATETIME) { - fields = Object.entries({ + fieldConfigs = Object.entries({ ...Neo4jDate, ...Neo4jTime }); } else if (typeName === TemporalType.LOCALDATETIME) { - fields = Object.entries({ + fieldConfigs = Object.entries({ ...Neo4jDate, ...Neo4jTime }).filter(([name]) => name !== Neo4jTimeField.TIMEZONE); } else if (typeName === SpatialType.POINT) { - fields = Object.entries({ + fieldConfigs = Object.entries({ ...Neo4jPoint }); } - return fields; + fieldConfigs = fieldConfigs.map(([fieldName, fieldType]) => { + return { + name: buildName({ name: fieldName }), + type: buildNamedType({ + name: fieldType + }) + }; + }); + let inputFields = fieldConfigs.map(config => buildInputValue(config)); + let outputFields = fieldConfigs.map(config => buildField(config)); + [inputFields, outputFields] = augmentNeo4jTypeFields({ + typeName, + inputFields, + outputFields, + config + }); + return [inputFields, outputFields]; +}; + +const augmentNeo4jTypeFields = ({ + typeName = '', + inputFields = [], + outputFields = [], + config +}) => { + let neo4jTypeName = 'Temporal'; + let usingOutputDocUrl = `${GRANDSTACK_DOCS}/graphql-temporal-types-datetime#using-temporal-fields-in-queries`; + let usingInputDocUrl = `${GRANDSTACK_DOCS}/graphql-temporal-types-datetime/#using-temporal-fields-in-mutations`; + if (isTemporalField({ type: typeName })) { + const typeNameLow = typeName.toLowerCase(); + const name = buildName({ name: Neo4jTypeFormatted.FORMATTED }); + const type = buildNamedType({ name: GraphQLString.name }); + // input value definitions + const inputDescription = buildDescription({ + value: `Creates a Neo4j [${neo4jTypeName}](${usingInputDocUrl}) ${typeName} value using a [String format](${CYPHER_MANUAL_CURRENT_FUNCTIONS}/temporal/${typeNameLow}/#functions-${typeNameLow}-create-string).`, + config + }); + inputFields.push( + buildInputValue({ + name, + type, + description: inputDescription + }) + ); + // output field definitions + const outputDescription = buildDescription({ + value: `Outputs a Neo4j [${neo4jTypeName}](${usingOutputDocUrl}) ${typeName} value as a String type by using the [toString](${CYPHER_MANUAL_CURRENT_FUNCTIONS}/string/#functions-tostring) Cypher function.`, + config + }); + outputFields.push( + buildField({ + name, + type, + description: outputDescription + }) + ); + } + return [inputFields, outputFields]; }; /** diff --git a/test/unit/augmentSchemaTest.test.js b/test/unit/augmentSchemaTest.test.js index e4cd0383..860fd611 100644 --- a/test/unit/augmentSchemaTest.test.js +++ b/test/unit/augmentSchemaTest.test.js @@ -20,378 +20,373 @@ test.cb('Test augmented schema', t => { }); const expectedSchema = /* GraphQL */ ` - """ - Directive definition - block - description - """ - directive @cypher(statement: String) on FIELD_DEFINITION + type _AddMovieExtensionNodePayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } - directive @relation( - name: String - direction: _RelationDirections - from: String - to: String - ) on FIELD_DEFINITION | OBJECT + type _RemoveMovieExtensionNodePayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } - directive @additionalLabels(labels: [String]) on OBJECT + type _MergeMovieExtensionNodePayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } - directive @MutationMeta( - relationship: String - from: String - to: String - ) on FIELD_DEFINITION + type _AddMovieGenresPayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } - directive @neo4j_ignore on FIELD_DEFINITION + type _RemoveMovieGenresPayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } - directive @id on FIELD_DEFINITION + type _MergeMovieGenresPayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } - directive @unique on FIELD_DEFINITION + type _AddMovieActorsPayload + @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { + "Field for the Actor node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Movie node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } - directive @index on FIELD_DEFINITION + type _RemoveMovieActorsPayload + @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { + "Field for the Actor node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Movie node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } - directive @isAuthenticated on OBJECT | FIELD_DEFINITION + type _MergeMovieActorsPayload + @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { + "Field for the Actor node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Movie node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } - directive @hasRole(roles: [Role]) on OBJECT | FIELD_DEFINITION + type _AddMovieFilmedInPayload + @relation(name: "FILMED_IN", from: "Movie", to: "State") { + "Field for the Movie node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the State node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: State + } - directive @hasScope(scopes: [String]) on OBJECT | FIELD_DEFINITION + type _RemoveMovieFilmedInPayload + @relation(name: "FILMED_IN", from: "Movie", to: "State") { + "Field for the Movie node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the State node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: State + } - "Query type line description" - type QueryA { - """ - Query field - block - description - """ - MoviesByYear( - year: Int - first: Int - offset: Int - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] - MoviesByYears( - year: [Int] - released: [_Neo4jDateTimeInput] - first: Int - offset: Int - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] - MovieById(movieId: ID!, filter: _MovieFilter): Movie - MovieBy_Id(_id: String!, filter: _MovieFilter): Movie - GenresBySubstring( - substring: String - first: Int - offset: Int - orderBy: [_GenreOrdering] - ): [Genre] - @cypher( - statement: "MATCH (g:Genre) WHERE toLower(g.name) CONTAINS toLower($substring) RETURN g" - ) - "Object type query field line description" - State( - first: Int - offset: Int - orderBy: [_StateOrdering] - filter: _StateFilter - ): [State] - User( - userId: ID - name: String - _id: String - first: Int - offset: Int - orderBy: [_UserOrdering] - filter: _UserFilter - ): [User] - Books( - first: Int - offset: Int - orderBy: [_BookOrdering] - filter: _BookFilter - ): [Book] - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS currentUserId" - ) - computedBoolean: Boolean @cypher(statement: "RETURN true") - computedFloat: Float @cypher(statement: "RETURN 3.14") - computedInt: Int @cypher(statement: "RETURN 1") - computedIntList: [Int] - @cypher(statement: "UNWIND [1, 2, 3] AS intList RETURN intList") - computedStringList: [String] - @cypher( - statement: "UNWIND ['hello', 'world'] AS stringList RETURN stringList" - ) - computedTemporal: _Neo4jDateTime - @cypher( - statement: "WITH datetime() AS now RETURN { year: now.year, month: now.month , day: now.day , hour: now.hour , minute: now.minute , second: now.second , millisecond: now.millisecond , microsecond: now.microsecond , nanosecond: now.nanosecond , timezone: now.timezone , formatted: toString(now) }" - ) - computedSpatial: _Neo4jPoint + type _MergeMovieFilmedInPayload + @relation(name: "FILMED_IN", from: "Movie", to: "State") { + "Field for the Movie node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the State node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: State + } + + type _MovieRatings @relation(name: "RATED", from: "User", to: "Movie") { + currentUserId(strArg: String): String @cypher( - statement: "WITH point({ x: 10, y: 20, z: 15 }) AS instance RETURN { x: instance.x, y: instance.y, z: instance.z, crs: instance.crs }" + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" ) - computedObjectWithCypherParams: currentUserId - @cypher(statement: "RETURN { userId: $cypherParams.currentUserId }") - customWithArguments(strArg: String, strInputArg: strInput): String - @cypher(statement: "RETURN $strInputArg.strArg") - CasedType( - first: Int - offset: Int - orderBy: [_CasedTypeOrdering] - filter: _CasedTypeFilter - ): [CasedType] - "Interface type query field line description" - Camera( - type: String - first: Int - orderBy: [_CameraOrdering] - filter: _CameraFilter - offset: Int - ): [Camera] - Person( - userId: ID - name: String - extensionScalar: String - _id: String - first: Int - offset: Int - orderBy: [_PersonOrdering] - filter: _PersonFilter - ): [Person] - InterfaceNoScalars( - orderBy: _InterfaceNoScalarsOrdering - first: Int - offset: Int - filter: _InterfaceNoScalarsFilter - ): [InterfaceNoScalars] - CustomCameras( - first: Int - offset: Int - orderBy: [_CameraOrdering] - ): [Camera] @cypher(statement: "MATCH (c:Camera) RETURN c") - CustomCamera: Camera @cypher(statement: "MATCH (c:Camera) RETURN c") - Movie( - _id: String - movieId: ID - title: String - someprefix_title_with_underscores: String - year: Int - released: _Neo4jDateTimeInput - plot: String - poster: String - imdbRating: Float - avgStars: Float - location: _Neo4jPointInput - locations: [_Neo4jPointInput] - years: [Int] - titles: [String] - imdbRatings: [Float] - releases: [_Neo4jDateTimeInput] - booleans: [Boolean] - enums: [BookGenre] - extensionScalar: String - first: Int - offset: Int - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] @hasScope(scopes: ["Movie: Read", "read:movie"]) - Genre( - _id: String - name: String - first: Int - offset: Int - orderBy: [_GenreOrdering] - filter: _GenreFilter - ): [Genre] @hasScope(scopes: ["Genre: Read", "read:genre"]) - Actor( - userId: ID - name: String - extensionScalar: String - datetimes: [_Neo4jDateTimeInput] - strings: [String] - _id: String - first: Int - offset: Int - orderBy: [_ActorOrdering] - filter: _ActorFilter - ): [Actor] @hasScope(scopes: ["Actor: Read", "read:actor"]) - Book( - genre: BookGenre - _id: String - first: Int - offset: Int - orderBy: [_BookOrdering] - filter: _BookFilter - ): [Book] @hasScope(scopes: ["Book: Read", "read:book"]) - TemporalNode( - datetime: _Neo4jDateTimeInput - name: String - time: _Neo4jTimeInput - date: _Neo4jDateInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetimes: [_Neo4jLocalDateTimeInput] - _id: String - first: Int - offset: Int - orderBy: [_TemporalNodeOrdering] - filter: _TemporalNodeFilter - ): [TemporalNode] - @hasScope(scopes: ["TemporalNode: Read", "read:temporalnode"]) - SpatialNode( - id: ID - point: _Neo4jPointInput - _id: String - first: Int - offset: Int - orderBy: [_SpatialNodeOrdering] - filter: _SpatialNodeFilter - ): [SpatialNode] - @hasScope(scopes: ["SpatialNode: Read", "read:spatialnode"]) - OldCamera( - type: String - id: ID - make: String - weight: Int - smell: String - _id: String - first: Int - offset: Int - orderBy: [_OldCameraOrdering] - filter: _OldCameraFilter - ): [OldCamera] @hasScope(scopes: ["OldCamera: Read", "read:oldcamera"]) - NewCamera( - type: String - id: ID - make: String - weight: Int - features: [String] - _id: String - first: Int - offset: Int - orderBy: [_NewCameraOrdering] - filter: _NewCameraFilter - ): [NewCamera] @hasScope(scopes: ["NewCamera: Read", "read:newcamera"]) - CameraMan( - userId: ID - name: String - extensionScalar: String - _id: String - first: Int - offset: Int - orderBy: [_CameraManOrdering] - filter: _CameraManFilter - ): [CameraMan] @hasScope(scopes: ["CameraMan: Read", "read:cameraman"]) - UniqueNode( - string: String - id: ID - anotherId: ID - _id: String - first: Int - offset: Int - orderBy: [_UniqueNodeOrdering] - filter: _UniqueNodeFilter - ): [UniqueNode] @hasScope(scopes: ["UniqueNode: Read", "read:uniquenode"]) - UniqueStringNode( - id: ID - uniqueString: String - _id: String - first: Int - offset: Int - orderBy: [_UniqueStringNodeOrdering] - filter: _UniqueStringNodeFilter - ): [UniqueStringNode] - @hasScope(scopes: ["UniqueStringNode: Read", "read:uniquestringnode"]) - } - - extend type QueryA { - MovieSearch(first: Int, offset: Int): [MovieSearch] - computedMovieSearch(first: Int, offset: Int): [MovieSearch] - @cypher(statement: "MATCH (ms:MovieSearch) RETURN ms") + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + User: User } - input _Neo4jDateTimeInput { - year: Int - month: Int - day: Int - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - timezone: String - formatted: String + input _MovieRatedFilter { + AND: [_MovieRatedFilter!] + OR: [_MovieRatedFilter!] + rating: Int + rating_not: Int + rating_in: [Int!] + rating_not_in: [Int!] + rating_lt: Int + rating_lte: Int + rating_gt: Int + rating_gte: Int + ratings: [Int!] + ratings_not: [Int!] + ratings_lt: [Int!] + ratings_lte: [Int!] + ratings_gt: [Int!] + ratings_gte: [Int!] + time: _Neo4jTimeInput + time_not: _Neo4jTimeInput + time_in: [_Neo4jTimeInput!] + time_not_in: [_Neo4jTimeInput!] + time_lt: _Neo4jTimeInput + time_lte: _Neo4jTimeInput + time_gt: _Neo4jTimeInput + time_gte: _Neo4jTimeInput + date: _Neo4jDateInput + date_not: _Neo4jDateInput + date_in: [_Neo4jDateInput!] + date_not_in: [_Neo4jDateInput!] + date_lt: _Neo4jDateInput + date_lte: _Neo4jDateInput + date_gt: _Neo4jDateInput + date_gte: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + datetime_not: _Neo4jDateTimeInput + datetime_in: [_Neo4jDateTimeInput!] + datetime_not_in: [_Neo4jDateTimeInput!] + datetime_lt: _Neo4jDateTimeInput + datetime_lte: _Neo4jDateTimeInput + datetime_gt: _Neo4jDateTimeInput + datetime_gte: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localtime_not: _Neo4jLocalTimeInput + localtime_in: [_Neo4jLocalTimeInput!] + localtime_not_in: [_Neo4jLocalTimeInput!] + localtime_lt: _Neo4jLocalTimeInput + localtime_lte: _Neo4jLocalTimeInput + localtime_gt: _Neo4jLocalTimeInput + localtime_gte: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetime_not: _Neo4jLocalDateTimeInput + localdatetime_in: [_Neo4jLocalDateTimeInput!] + localdatetime_not_in: [_Neo4jLocalDateTimeInput!] + localdatetime_lt: _Neo4jLocalDateTimeInput + localdatetime_lte: _Neo4jLocalDateTimeInput + localdatetime_gt: _Neo4jLocalDateTimeInput + localdatetime_gte: _Neo4jLocalDateTimeInput + datetimes: [_Neo4jDateTimeInput!] + datetimes_not: [_Neo4jDateTimeInput!] + datetimes_lt: [_Neo4jDateTimeInput!] + datetimes_lte: [_Neo4jDateTimeInput!] + datetimes_gt: [_Neo4jDateTimeInput!] + datetimes_gte: [_Neo4jDateTimeInput!] + location: _Neo4jPointInput + location_not: _Neo4jPointInput + location_distance: _Neo4jPointDistanceFilter + location_distance_lt: _Neo4jPointDistanceFilter + location_distance_lte: _Neo4jPointDistanceFilter + location_distance_gt: _Neo4jPointDistanceFilter + location_distance_gte: _Neo4jPointDistanceFilter + User: _UserFilter } - enum _MovieOrdering { - _id_asc - _id_desc - movieId_asc - movieId_desc - title_asc - title_desc - someprefix_title_with_underscores_asc - someprefix_title_with_underscores_desc - year_asc - year_desc - released_asc - released_desc - plot_asc - plot_desc - poster_asc - poster_desc - imdbRating_asc - imdbRating_desc - degree_asc - degree_desc - avgStars_asc - avgStars_desc - scaleRating_asc - scaleRating_desc - scaleRatingFloat_asc - scaleRatingFloat_desc + enum _RatedOrdering { currentUserId_asc currentUserId_desc - extensionScalar_asc - extensionScalar_desc + rating_asc + rating_desc + time_asc + time_desc + date_asc + date_desc + datetime_asc + datetime_desc + localtime_asc + localtime_desc + localdatetime_asc + localdatetime_desc + _id_asc + _id_desc } - input _MovieFilter { - AND: [_MovieFilter!] - OR: [_MovieFilter!] - movieId: ID - movieId_not: ID - movieId_in: [ID!] - movieId_not_in: [ID!] - movieId_contains: ID - movieId_not_contains: ID - movieId_starts_with: ID - movieId_not_starts_with: ID - movieId_ends_with: ID - movieId_not_ends_with: ID - title: String - title_not: String - title_in: [String!] - title_not_in: [String!] - title_contains: String - title_not_contains: String - title_starts_with: String - title_not_starts_with: String - title_ends_with: String - title_not_ends_with: String - someprefix_title_with_underscores: String - someprefix_title_with_underscores_not: String - someprefix_title_with_underscores_in: [String!] - someprefix_title_with_underscores_not_in: [String!] - someprefix_title_with_underscores_contains: String - someprefix_title_with_underscores_not_contains: String - someprefix_title_with_underscores_starts_with: String - someprefix_title_with_underscores_not_starts_with: String - someprefix_title_with_underscores_ends_with: String - someprefix_title_with_underscores_not_ends_with: String + input _RatedInput { + rating: Int + ratings: [Int] + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + datetimes: [_Neo4jDateTimeInput] + location: _Neo4jPointInput + } + + type _AddMovieRatingsPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _RemoveMovieRatingsPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } + + type _UpdateMovieRatingsPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _MergeMovieRatingsPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + input _MovieInput { + movieId: ID! + } + + enum _MovieOrdering { + _id_asc + _id_desc + movieId_asc + movieId_desc + title_asc + title_desc + someprefix_title_with_underscores_asc + someprefix_title_with_underscores_desc + year_asc + year_desc + released_asc + released_desc + plot_asc + plot_desc + poster_asc + poster_desc + imdbRating_asc + imdbRating_desc + degree_asc + degree_desc + avgStars_asc + avgStars_desc + scaleRating_asc + scaleRating_desc + scaleRatingFloat_asc + scaleRatingFloat_desc + currentUserId_asc + currentUserId_desc + extensionScalar_asc + extensionScalar_desc + } + + input _MovieFilter { + AND: [_MovieFilter!] + OR: [_MovieFilter!] + movieId: ID + movieId_not: ID + movieId_in: [ID!] + movieId_not_in: [ID!] + movieId_contains: ID + movieId_not_contains: ID + movieId_starts_with: ID + movieId_not_starts_with: ID + movieId_ends_with: ID + movieId_not_ends_with: ID + title: String + title_not: String + title_in: [String!] + title_not_in: [String!] + title_contains: String + title_not_contains: String + title_starts_with: String + title_not_starts_with: String + title_ends_with: String + title_not_ends_with: String + someprefix_title_with_underscores: String + someprefix_title_with_underscores_not: String + someprefix_title_with_underscores_in: [String!] + someprefix_title_with_underscores_not_in: [String!] + someprefix_title_with_underscores_contains: String + someprefix_title_with_underscores_not_contains: String + someprefix_title_with_underscores_starts_with: String + someprefix_title_with_underscores_not_starts_with: String + someprefix_title_with_underscores_ends_with: String + someprefix_title_with_underscores_not_ends_with: String year: Int year_not: Int year_in: [Int!] @@ -544,185 +539,249 @@ test.cb('Test augmented schema', t => { extensionNode_every: _GenreFilter } - input _GenreFilter { - AND: [_GenreFilter!] - OR: [_GenreFilter!] - name: String - name_not: String - name_in: [String!] - name_not_in: [String!] - name_contains: String - name_not_contains: String - name_starts_with: String - name_not_starts_with: String - name_ends_with: String - name_not_ends_with: String - interfacedRelationshipType: _GenreInterfacedRelationshipTypeFilter - interfacedRelationshipType_not: _GenreInterfacedRelationshipTypeFilter - interfacedRelationshipType_in: [_GenreInterfacedRelationshipTypeFilter!] - interfacedRelationshipType_not_in: [_GenreInterfacedRelationshipTypeFilter!] - interfacedRelationshipType_some: _GenreInterfacedRelationshipTypeFilter - interfacedRelationshipType_none: _GenreInterfacedRelationshipTypeFilter - interfacedRelationshipType_single: _GenreInterfacedRelationshipTypeFilter - interfacedRelationshipType_every: _GenreInterfacedRelationshipTypeFilter - } - - input _GenreInterfacedRelationshipTypeFilter { - AND: [_GenreInterfacedRelationshipTypeFilter!] - OR: [_GenreInterfacedRelationshipTypeFilter!] - string: String - string_not: String - string_in: [String!] - string_not_in: [String!] - string_contains: String - string_not_contains: String - string_starts_with: String - string_not_starts_with: String - string_ends_with: String - string_not_ends_with: String - boolean: Boolean - boolean_not: Boolean - Person: _PersonFilter - } - - input _InterfacedRelationshipTypeInput { - string: String! - boolean: Boolean - } - - type _AddGenreInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre - string: String! - boolean: Boolean - _id: String - } - - type _RemoveGenreInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre - } - - type _UpdateGenreInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre - string: String! - boolean: Boolean - _id: String - } - - type _MergeGenreInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" + "Object type line description" + type Movie + @additionalLabels( + labels: ["u_<%= $cypherParams.userId %>", "newMovieLabel"] ) { - from: Person - to: Genre - string: String! - boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." _id: String - } - - input _ActorFilter { - AND: [_ActorFilter!] - OR: [_ActorFilter!] - userId: ID - userId_not: ID - userId_in: [ID!] - userId_not_in: [ID!] - userId_contains: ID - userId_not_contains: ID - userId_starts_with: ID - userId_not_starts_with: ID - userId_ends_with: ID - userId_not_ends_with: ID - name: String - name_not: String - name_in: [String!] - name_not_in: [String!] - name_contains: String - name_not_contains: String - name_starts_with: String - name_not_starts_with: String - name_ends_with: String - name_not_ends_with: String - movies: _MovieFilter - movies_not: _MovieFilter - movies_in: [_MovieFilter!] - movies_not_in: [_MovieFilter!] - movies_some: _MovieFilter - movies_none: _MovieFilter - movies_single: _MovieFilter - movies_every: _MovieFilter - knows: _PersonFilter - knows_not: _PersonFilter - knows_in: [_PersonFilter!] - knows_not_in: [_PersonFilter!] - knows_some: _PersonFilter - knows_none: _PersonFilter - knows_single: _PersonFilter - knows_every: _PersonFilter - extensionScalar: String - extensionScalar_not: String - extensionScalar_in: [String!] - extensionScalar_not_in: [String!] - extensionScalar_contains: String - extensionScalar_not_contains: String - extensionScalar_starts_with: String - extensionScalar_not_starts_with: String - extensionScalar_ends_with: String - extensionScalar_not_ends_with: String - datetimes: [_Neo4jDateTimeInput!] - datetimes_not: [_Neo4jDateTimeInput!] - datetimes_lt: [_Neo4jDateTimeInput!] - datetimes_lte: [_Neo4jDateTimeInput!] - datetimes_gt: [_Neo4jDateTimeInput!] - datetimes_gte: [_Neo4jDateTimeInput!] - strings: [String!] - strings_not: [String!] - strings_contains: [String!] - strings_not_contains: [String!] - strings_starts_with: [String!] - strings_not_starts_with: [String!] - strings_ends_with: [String!] - strings_not_ends_with: [String!] - interfacedRelationshipType: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_not: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_in: [_PersonInterfacedRelationshipTypeFilter!] - interfacedRelationshipType_not_in: [_PersonInterfacedRelationshipTypeFilter!] - interfacedRelationshipType_some: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_none: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_single: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_every: _PersonInterfacedRelationshipTypeFilter - reflexiveInterfacedRelationshipType: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_not: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] - reflexiveInterfacedRelationshipType_not_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] - reflexiveInterfacedRelationshipType_some: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_none: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_single: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_every: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - } - - input _StateFilter { - AND: [_StateFilter!] - OR: [_StateFilter!] + "Field line description" + movieId: ID! @id + """ + Field + block + description + """ + title: String @isAuthenticated + someprefix_title_with_underscores: String + year: Int + released: _Neo4jDateTime + plot: String + poster: String + imdbRating: Float + "@relation field line description" + genres( + first: Int + offset: Int + orderBy: [_GenreOrdering] + filter: _GenreFilter + ): [Genre] @relation(name: "IN_GENRE", direction: "OUT") + similar( + first: Int = 3 + offset: Int = 0 + orderBy: [_MovieOrdering] + ): [Movie] + @cypher( + statement: "WITH {this} AS this MATCH (this)--(:Genre)--(o:Movie) RETURN o" + ) + mostSimilar: Movie @cypher(statement: "WITH {this} AS this RETURN this") + degree: Int + @cypher(statement: "WITH {this} AS this RETURN SIZE((this)--())") + actors( + first: Int = 3 + offset: Int = 0 + name: String + names: [String] + strings: [String] + datetimes: [_Neo4jDateTimeInput] + orderBy: [_ActorOrdering] + filter: _ActorFilter + ): [Actor] @relation(name: "ACTED_IN", direction: "IN") + avgStars: Float + filmedIn(filter: _StateFilter): State + @relation(name: "FILMED_IN", direction: "OUT") + location: _Neo4jPoint + locations: [_Neo4jPoint] + scaleRating(scale: Int = 3): Float + @cypher(statement: "WITH $this AS this RETURN $scale * this.imdbRating") + scaleRatingFloat(scale: Float = 1.5): Float + @cypher(statement: "WITH $this AS this RETURN $scale * this.imdbRating") + actorMovies(first: Int, offset: Int, orderBy: [_MovieOrdering]): [Movie] + @cypher( + statement: "MATCH (this)-[:ACTED_IN*2]-(other:Movie) RETURN other" + ) + "@relation type field line description" + ratings( + rating: Int + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + location: _Neo4jPointInput + ratings: [Int] + datetimes: [_Neo4jDateTimeInput] + first: Int + offset: Int + orderBy: [_RatedOrdering] + filter: _MovieRatedFilter + ): [_MovieRatings] + years: [Int] + titles: [String] + imdbRatings: [Float] + "Temporal type field line description" + releases: [_Neo4jDateTime] + booleans: [Boolean] + enums: [BookGenre] + "Ignored field line description" + customField: String @neo4j_ignore + } + + type _AddGenreMoviesPayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } + + type _RemoveGenreMoviesPayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } + + type _MergeGenreMoviesPayload + @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { + "Field for the Movie node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Movie + "Field for the Genre node this IN_GENRE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } + + type _GenreInterfacedRelationshipType + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + Person: Person + } + + enum _InterfacedRelationshipTypeOrdering { + string_asc + string_desc + boolean_asc + boolean_desc + _id_asc + _id_desc + } + + input _InterfacedRelationshipTypeInput { + string: String! + boolean: Boolean + } + + type _AddGenreInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _RemoveGenreInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + } + + type _UpdateGenreInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _MergeGenreInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + input _GenreInput { + name: String! + } + + type Genre { + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String + name: String + movies( + first: Int = 3 + offset: Int = 0 + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] @relation(name: "IN_GENRE", direction: "IN") + highestRatedMovie: Movie + @cypher( + statement: "MATCH (m:Movie)-[:IN_GENRE]->(this) RETURN m ORDER BY m.imdbRating DESC LIMIT 1" + ) + interfacedRelationshipType( + first: Int + offset: Int + orderBy: [_InterfacedRelationshipTypeOrdering] + filter: _GenreInterfacedRelationshipTypeFilter + ): [_GenreInterfacedRelationshipType] + } + + input _StateInput { + name: String! + } + + enum _StateOrdering { + name_asc + name_desc + id_asc + id_desc + _id_asc + _id_desc + } + + input _StateFilter { + AND: [_StateFilter!] + OR: [_StateFilter!] name: String name_not: String name_in: [String!] @@ -745,553 +804,199 @@ test.cb('Test augmented schema', t => { id_not_ends_with: ID } - input _MovieRatedFilter { - AND: [_MovieRatedFilter!] - OR: [_MovieRatedFilter!] - rating: Int - rating_not: Int - rating_in: [Int!] - rating_not_in: [Int!] - rating_lt: Int - rating_lte: Int - rating_gt: Int - rating_gte: Int - ratings: [Int!] - ratings_not: [Int!] - ratings_lt: [Int!] - ratings_lte: [Int!] - ratings_gt: [Int!] - ratings_gte: [Int!] - time: _Neo4jTimeInput - time_not: _Neo4jTimeInput - time_in: [_Neo4jTimeInput!] - time_not_in: [_Neo4jTimeInput!] - time_lt: _Neo4jTimeInput - time_lte: _Neo4jTimeInput - time_gt: _Neo4jTimeInput - time_gte: _Neo4jTimeInput - date: _Neo4jDateInput - date_not: _Neo4jDateInput - date_in: [_Neo4jDateInput!] - date_not_in: [_Neo4jDateInput!] - date_lt: _Neo4jDateInput - date_lte: _Neo4jDateInput - date_gt: _Neo4jDateInput - date_gte: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - datetime_not: _Neo4jDateTimeInput - datetime_in: [_Neo4jDateTimeInput!] - datetime_not_in: [_Neo4jDateTimeInput!] - datetime_lt: _Neo4jDateTimeInput - datetime_lte: _Neo4jDateTimeInput - datetime_gt: _Neo4jDateTimeInput - datetime_gte: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localtime_not: _Neo4jLocalTimeInput - localtime_in: [_Neo4jLocalTimeInput!] - localtime_not_in: [_Neo4jLocalTimeInput!] - localtime_lt: _Neo4jLocalTimeInput - localtime_lte: _Neo4jLocalTimeInput - localtime_gt: _Neo4jLocalTimeInput - localtime_gte: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetime_not: _Neo4jLocalDateTimeInput - localdatetime_in: [_Neo4jLocalDateTimeInput!] - localdatetime_not_in: [_Neo4jLocalDateTimeInput!] - localdatetime_lt: _Neo4jLocalDateTimeInput - localdatetime_lte: _Neo4jLocalDateTimeInput - localdatetime_gt: _Neo4jLocalDateTimeInput - localdatetime_gte: _Neo4jLocalDateTimeInput - datetimes: [_Neo4jDateTimeInput!] - datetimes_not: [_Neo4jDateTimeInput!] - datetimes_lt: [_Neo4jDateTimeInput!] - datetimes_lte: [_Neo4jDateTimeInput!] - datetimes_gt: [_Neo4jDateTimeInput!] - datetimes_gte: [_Neo4jDateTimeInput!] - location: _Neo4jPointInput - location_not: _Neo4jPointInput - location_distance: _Neo4jPointDistanceFilter - location_distance_lt: _Neo4jPointDistanceFilter - location_distance_lte: _Neo4jPointDistanceFilter - location_distance_gt: _Neo4jPointDistanceFilter - location_distance_gte: _Neo4jPointDistanceFilter - User: _UserFilter + type State { + customField: String @neo4j_ignore + name: String! @index + id: ID + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String } - input _UserFilter { - AND: [_UserFilter!] - OR: [_UserFilter!] - userId: ID - userId_not: ID - userId_in: [ID!] - userId_not_in: [ID!] - userId_contains: ID - userId_not_contains: ID - userId_starts_with: ID - userId_not_starts_with: ID - userId_ends_with: ID - userId_not_ends_with: ID - name: String - name_not: String - name_in: [String!] - name_not_in: [String!] - name_contains: String - name_not_contains: String - name_starts_with: String - name_not_starts_with: String - name_ends_with: String - name_not_ends_with: String - interfacedRelationshipType: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_not: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_in: [_PersonInterfacedRelationshipTypeFilter!] - interfacedRelationshipType_not_in: [_PersonInterfacedRelationshipTypeFilter!] - interfacedRelationshipType_some: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_none: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_single: _PersonInterfacedRelationshipTypeFilter - interfacedRelationshipType_every: _PersonInterfacedRelationshipTypeFilter - reflexiveInterfacedRelationshipType: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_not: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] - reflexiveInterfacedRelationshipType_not_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] - reflexiveInterfacedRelationshipType_some: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_none: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_single: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - reflexiveInterfacedRelationshipType_every: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - rated: _UserRatedFilter - rated_not: _UserRatedFilter - rated_in: [_UserRatedFilter!] - rated_not_in: [_UserRatedFilter!] - rated_some: _UserRatedFilter - rated_none: _UserRatedFilter - rated_single: _UserRatedFilter - rated_every: _UserRatedFilter - friends: _FriendOfDirectionsFilter - friends_not: _FriendOfDirectionsFilter - friends_in: [_FriendOfDirectionsFilter!] - friends_not_in: [_FriendOfDirectionsFilter!] - friends_some: _FriendOfDirectionsFilter - friends_none: _FriendOfDirectionsFilter - friends_single: _FriendOfDirectionsFilter - friends_every: _FriendOfDirectionsFilter - favorites: _MovieFilter - favorites_not: _MovieFilter - favorites_in: [_MovieFilter!] - favorites_not_in: [_MovieFilter!] - favorites_some: _MovieFilter - favorites_none: _MovieFilter - favorites_single: _MovieFilter - favorites_every: _MovieFilter - extensionScalar: String - extensionScalar_not: String - extensionScalar_in: [String!] - extensionScalar_not_in: [String!] - extensionScalar_contains: String - extensionScalar_not_contains: String - extensionScalar_starts_with: String - extensionScalar_not_starts_with: String - extensionScalar_ends_with: String - extensionScalar_not_ends_with: String + type _PersonInterfacedRelationshipType + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + Genre: Genre } - input _UserRatedFilter { - AND: [_UserRatedFilter!] - OR: [_UserRatedFilter!] - rating: Int - rating_not: Int - rating_in: [Int!] - rating_not_in: [Int!] - rating_lt: Int - rating_lte: Int - rating_gt: Int - rating_gte: Int - ratings: [Int!] - ratings_not: [Int!] - ratings_lt: [Int!] - ratings_lte: [Int!] - ratings_gt: [Int!] - ratings_gte: [Int!] - time: _Neo4jTimeInput - time_not: _Neo4jTimeInput - time_in: [_Neo4jTimeInput!] - time_not_in: [_Neo4jTimeInput!] - time_lt: _Neo4jTimeInput - time_lte: _Neo4jTimeInput - time_gt: _Neo4jTimeInput - time_gte: _Neo4jTimeInput - date: _Neo4jDateInput - date_not: _Neo4jDateInput - date_in: [_Neo4jDateInput!] - date_not_in: [_Neo4jDateInput!] - date_lt: _Neo4jDateInput - date_lte: _Neo4jDateInput - date_gt: _Neo4jDateInput - date_gte: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - datetime_not: _Neo4jDateTimeInput - datetime_in: [_Neo4jDateTimeInput!] - datetime_not_in: [_Neo4jDateTimeInput!] - datetime_lt: _Neo4jDateTimeInput - datetime_lte: _Neo4jDateTimeInput - datetime_gt: _Neo4jDateTimeInput - datetime_gte: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localtime_not: _Neo4jLocalTimeInput - localtime_in: [_Neo4jLocalTimeInput!] - localtime_not_in: [_Neo4jLocalTimeInput!] - localtime_lt: _Neo4jLocalTimeInput - localtime_lte: _Neo4jLocalTimeInput - localtime_gt: _Neo4jLocalTimeInput - localtime_gte: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetime_not: _Neo4jLocalDateTimeInput - localdatetime_in: [_Neo4jLocalDateTimeInput!] - localdatetime_not_in: [_Neo4jLocalDateTimeInput!] - localdatetime_lt: _Neo4jLocalDateTimeInput - localdatetime_lte: _Neo4jLocalDateTimeInput - localdatetime_gt: _Neo4jLocalDateTimeInput - localdatetime_gte: _Neo4jLocalDateTimeInput - datetimes: [_Neo4jDateTimeInput!] - datetimes_not: [_Neo4jDateTimeInput!] - datetimes_lt: [_Neo4jDateTimeInput!] - datetimes_lte: [_Neo4jDateTimeInput!] - datetimes_gt: [_Neo4jDateTimeInput!] - datetimes_gte: [_Neo4jDateTimeInput!] - location: _Neo4jPointInput - location_not: _Neo4jPointInput - location_distance: _Neo4jPointDistanceFilter - location_distance_lt: _Neo4jPointDistanceFilter - location_distance_lte: _Neo4jPointDistanceFilter - location_distance_gt: _Neo4jPointDistanceFilter - location_distance_gte: _Neo4jPointDistanceFilter - Movie: _MovieFilter - } - - input _FriendOfDirectionsFilter { - from: _FriendOfFilter - to: _FriendOfFilter + type _AddPersonInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - input _FriendOfFilter { - AND: [_FriendOfFilter!] - OR: [_FriendOfFilter!] - since: Int - since_not: Int - since_in: [Int!] - since_not_in: [Int!] - since_lt: Int - since_lte: Int - since_gt: Int - since_gte: Int - time: _Neo4jTimeInput - time_not: _Neo4jTimeInput - time_in: [_Neo4jTimeInput!] - time_not_in: [_Neo4jTimeInput!] - time_lt: _Neo4jTimeInput - time_lte: _Neo4jTimeInput - time_gt: _Neo4jTimeInput - time_gte: _Neo4jTimeInput - date: _Neo4jDateInput - date_not: _Neo4jDateInput - date_in: [_Neo4jDateInput!] - date_not_in: [_Neo4jDateInput!] - date_lt: _Neo4jDateInput - date_lte: _Neo4jDateInput - date_gt: _Neo4jDateInput - date_gte: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - datetime_not: _Neo4jDateTimeInput - datetime_in: [_Neo4jDateTimeInput!] - datetime_not_in: [_Neo4jDateTimeInput!] - datetime_lt: _Neo4jDateTimeInput - datetime_lte: _Neo4jDateTimeInput - datetime_gt: _Neo4jDateTimeInput - datetime_gte: _Neo4jDateTimeInput - ratings: [String!] - ratings_not: [String!] - ratings_contains: [String!] - ratings_not_contains: [String!] - ratings_starts_with: [String!] - ratings_not_starts_with: [String!] - ratings_ends_with: [String!] - ratings_not_ends_with: [String!] - datetimes: [_Neo4jDateTimeInput!] - datetimes_not: [_Neo4jDateTimeInput!] - datetimes_lt: [_Neo4jDateTimeInput!] - datetimes_lte: [_Neo4jDateTimeInput!] - datetimes_gt: [_Neo4jDateTimeInput!] - datetimes_gte: [_Neo4jDateTimeInput!] - localtime: _Neo4jLocalTimeInput - localtime_not: _Neo4jLocalTimeInput - localtime_in: [_Neo4jLocalTimeInput!] - localtime_not_in: [_Neo4jLocalTimeInput!] - localtime_lt: _Neo4jLocalTimeInput - localtime_lte: _Neo4jLocalTimeInput - localtime_gt: _Neo4jLocalTimeInput - localtime_gte: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetime_not: _Neo4jLocalDateTimeInput - localdatetime_in: [_Neo4jLocalDateTimeInput!] - localdatetime_not_in: [_Neo4jLocalDateTimeInput!] - localdatetime_lt: _Neo4jLocalDateTimeInput - localdatetime_lte: _Neo4jLocalDateTimeInput - localdatetime_gt: _Neo4jLocalDateTimeInput - localdatetime_gte: _Neo4jLocalDateTimeInput - location: _Neo4jPointInput - location_not: _Neo4jPointInput - location_distance: _Neo4jPointDistanceFilter - location_distance_lt: _Neo4jPointDistanceFilter - location_distance_lte: _Neo4jPointDistanceFilter - location_distance_gt: _Neo4jPointDistanceFilter - location_distance_gte: _Neo4jPointDistanceFilter - User: _UserFilter + type _RemovePersonInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre } - input _InterfaceNoScalarsFilter { - AND: [_InterfaceNoScalarsFilter!] - OR: [_InterfaceNoScalarsFilter!] - movies: _MovieFilter - movies_not: _MovieFilter - movies_in: [_MovieFilter!] - movies_not_in: [_MovieFilter!] - movies_some: _MovieFilter - movies_none: _MovieFilter - movies_single: _MovieFilter - movies_every: _MovieFilter + type _UpdatePersonInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - "Object type line description" - type Movie - @additionalLabels( - labels: ["u_<%= $cypherParams.userId %>", "newMovieLabel"] + type _MergePersonInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String - "Field line description" - movieId: ID! @id - """ - Field - block - description - """ - title: String @isAuthenticated - someprefix_title_with_underscores: String - year: Int - released: _Neo4jDateTime - plot: String - poster: String - imdbRating: Float - "@relation field line description" - genres( - first: Int - offset: Int - orderBy: [_GenreOrdering] - filter: _GenreFilter - ): [Genre] @relation(name: "IN_GENRE", direction: "OUT") - similar( - first: Int = 3 - offset: Int = 0 - orderBy: [_MovieOrdering] - ): [Movie] - @cypher( - statement: "WITH {this} AS this MATCH (this)--(:Genre)--(o:Movie) RETURN o" - ) - mostSimilar: Movie @cypher(statement: "WITH {this} AS this RETURN this") - degree: Int - @cypher(statement: "WITH {this} AS this RETURN SIZE((this)--())") - actors( - first: Int = 3 - offset: Int = 0 - name: String - names: [String] - strings: [String] - datetimes: [_Neo4jDateTimeInput] - orderBy: [_ActorOrdering] - filter: _ActorFilter - ): [Actor] @relation(name: "ACTED_IN", direction: "IN") - avgStars: Float - filmedIn(filter: _StateFilter): State - @relation(name: "FILMED_IN", direction: "OUT") - location: _Neo4jPoint - locations: [_Neo4jPoint] - scaleRating(scale: Int = 3): Float - @cypher(statement: "WITH $this AS this RETURN $scale * this.imdbRating") - scaleRatingFloat(scale: Float = 1.5): Float - @cypher(statement: "WITH $this AS this RETURN $scale * this.imdbRating") - actorMovies(first: Int, offset: Int, orderBy: [_MovieOrdering]): [Movie] - @cypher( - statement: "MATCH (this)-[:ACTED_IN*2]-(other:Movie) RETURN other" - ) - "@relation type field line description" - ratings( - rating: Int - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - location: _Neo4jPointInput - ratings: [Int] - datetimes: [_Neo4jDateTimeInput] - first: Int - offset: Int - orderBy: [_RatedOrdering] - filter: _MovieRatedFilter - ): [_MovieRatings] - years: [Int] - titles: [String] - imdbRatings: [Float] - "Temporal type field line description" - releases: [_Neo4jDateTime] - booleans: [Boolean] - enums: [BookGenre] - "Ignored field line description" - customField: String @neo4j_ignore } - extend type Movie @hasRole(roles: [admin]) { - currentUserId(strArg: String): String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - "Object type extension field line description" - interfaceNoScalars( - orderBy: _InterfaceNoScalarsOrdering + type _PersonReflexiveInterfacedRelationshipTypeDirections + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from( first: Int offset: Int - filter: _InterfaceNoScalarsFilter - ): [InterfaceNoScalars] - @relation(name: "INTERFACE_NO_SCALARS", direction: OUT) - extensionScalar: String - extensionNode( + orderBy: [_ReflexiveInterfacedRelationshipTypeOrdering] + filter: _ReflexiveInterfacedRelationshipTypeFilter + ): [_PersonReflexiveInterfacedRelationshipType] + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to( first: Int offset: Int - orderBy: [_GenreOrdering] - filter: _GenreFilter - ): [Genre] @relation(name: "IN_GENRE", direction: "OUT") + orderBy: [_ReflexiveInterfacedRelationshipTypeOrdering] + filter: _ReflexiveInterfacedRelationshipTypeFilter + ): [_PersonReflexiveInterfacedRelationshipType] } - type _Neo4jDateTime { - year: Int - month: Int - day: Int - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - timezone: String - formatted: String - } - - """ - Custom ordering enum type - block description - """ - enum _GenreOrdering { - name_desc - name_asc - } - - type Genre { - _id: String - name: String - movies( - first: Int = 3 - offset: Int = 0 - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] @relation(name: "IN_GENRE", direction: "IN") - highestRatedMovie: Movie - @cypher( - statement: "MATCH (m:Movie)-[:IN_GENRE]->(this) RETURN m ORDER BY m.imdbRating DESC LIMIT 1" - ) - interfacedRelationshipType( - first: Int - offset: Int - orderBy: [_InterfacedRelationshipTypeOrdering] - filter: _GenreInterfacedRelationshipTypeFilter - ): [_GenreInterfacedRelationshipType] - } - - type _GenreInterfacedRelationshipType + type _PersonReflexiveInterfacedRelationshipType @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" - to: "Genre" + to: "Person" ) { - string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." Person: Person } - enum _InterfacedRelationshipTypeOrdering { - string_asc - string_desc + input _ReflexiveInterfacedRelationshipTypeDirectionsFilter { + from: _ReflexiveInterfacedRelationshipTypeFilter + to: _ReflexiveInterfacedRelationshipTypeFilter + } + + enum _ReflexiveInterfacedRelationshipTypeOrdering { boolean_asc boolean_desc _id_asc _id_desc } - input _GenreInterfacedRelationshipTypeFilter { - AND: [_GenreInterfacedRelationshipTypeFilter!] - OR: [_GenreInterfacedRelationshipTypeFilter!] - string: String - string_not: String - string_in: [String!] - string_not_in: [String!] - string_contains: String - string_not_contains: String - string_starts_with: String - string_not_starts_with: String - string_ends_with: String - string_not_ends_with: String + input _ReflexiveInterfacedRelationshipTypeInput { boolean: Boolean - boolean_not: Boolean - Person: _PersonFilter } - enum _ActorOrdering { - userId_asc - userId_desc - name_asc - name_desc - extensionScalar_asc - extensionScalar_desc - _id_asc - _id_desc + type _AddPersonReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - type Actor { - userId: ID! - name: String - movies( - first: Int - offset: Int - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] @relation(name: "ACTED_IN", direction: "OUT") - knows( - first: Int - offset: Int - orderBy: [_PersonOrdering] - filter: _PersonFilter - ): [Person] @relation(name: "KNOWS", direction: "OUT") - extensionScalar: String - datetimes: [_Neo4jDateTime] - strings: [String] - interfacedRelationshipType( - first: Int - offset: Int - orderBy: [_InterfacedRelationshipTypeOrdering] - filter: _PersonInterfacedRelationshipTypeFilter - ): [_PersonInterfacedRelationshipType] - reflexiveInterfacedRelationshipType: _PersonReflexiveInterfacedRelationshipTypeDirections + type _RemovePersonReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + } + + type _UpdatePersonReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - extend type Actor implements Person + type _MergePersonReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + input _PersonInput { + userId: ID! + } """ Interface type @@ -1324,27 +1029,73 @@ test.cb('Test augmented schema', t => { to: Genre! } - extend interface Person { - extensionScalar: String - } - - type State { - customField: String @neo4j_ignore - name: String! @index - id: ID - _id: String + "Enum type line description" + enum _PersonOrdering { + "Enum value line description" + userId_asc + """ + Enum value + block + description + """ + userId_desc + name_asc + name_desc } - type _PersonInterfacedRelationshipType - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - string: String! - boolean: Boolean - _id: String - Genre: Genre + """ + Custom filtering input type + block description + """ + input _PersonFilter { + AND: [_PersonFilter!] + OR: [_PersonFilter!] + userId: ID + userId_not: ID + userId_in: [ID!] + userId_not_in: [ID!] + userId_contains: ID + userId_not_contains: ID + userId_starts_with: ID + userId_not_starts_with: ID + userId_ends_with: ID + userId_not_ends_with: ID + name: String + name_not: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_not_contains: String + name_starts_with: String + name_not_starts_with: String + name_ends_with: String + name_not_ends_with: String + interfacedRelationshipType: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_not: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_in: [_PersonInterfacedRelationshipTypeFilter!] + interfacedRelationshipType_not_in: [_PersonInterfacedRelationshipTypeFilter!] + interfacedRelationshipType_some: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_none: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_single: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_every: _PersonInterfacedRelationshipTypeFilter + reflexiveInterfacedRelationshipType: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_not: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] + reflexiveInterfacedRelationshipType_not_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] + reflexiveInterfacedRelationshipType_some: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_none: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_single: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_every: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + extensionScalar: String + extensionScalar_not: String + extensionScalar_in: [String!] + extensionScalar_not_in: [String!] + extensionScalar_contains: String + extensionScalar_not_contains: String + extensionScalar_starts_with: String + extensionScalar_not_starts_with: String + extensionScalar_ends_with: String + extensionScalar_not_ends_with: String } input _PersonInterfacedRelationshipTypeFilter { @@ -1365,454 +1116,238 @@ test.cb('Test augmented schema', t => { Genre: _GenreFilter } - type _MovieRatings @relation(name: "RATED", from: "User", to: "Movie") { - currentUserId(strArg: String): String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String - User: User - } - - type _Neo4jTime { - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - timezone: String - formatted: String - } - - input _Neo4jTimeInput { - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - timezone: String - formatted: String - } - - type _Neo4jDate { - year: Int - month: Int - day: Int - formatted: String + input _GenreFilter { + AND: [_GenreFilter!] + OR: [_GenreFilter!] + name: String + name_not: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_not_contains: String + name_starts_with: String + name_not_starts_with: String + name_ends_with: String + name_not_ends_with: String + interfacedRelationshipType: _GenreInterfacedRelationshipTypeFilter + interfacedRelationshipType_not: _GenreInterfacedRelationshipTypeFilter + interfacedRelationshipType_in: [_GenreInterfacedRelationshipTypeFilter!] + interfacedRelationshipType_not_in: [_GenreInterfacedRelationshipTypeFilter!] + interfacedRelationshipType_some: _GenreInterfacedRelationshipTypeFilter + interfacedRelationshipType_none: _GenreInterfacedRelationshipTypeFilter + interfacedRelationshipType_single: _GenreInterfacedRelationshipTypeFilter + interfacedRelationshipType_every: _GenreInterfacedRelationshipTypeFilter } - input _Neo4jDateInput { - year: Int - month: Int - day: Int - formatted: String + input _GenreInterfacedRelationshipTypeFilter { + AND: [_GenreInterfacedRelationshipTypeFilter!] + OR: [_GenreInterfacedRelationshipTypeFilter!] + string: String + string_not: String + string_in: [String!] + string_not_in: [String!] + string_contains: String + string_not_contains: String + string_starts_with: String + string_not_starts_with: String + string_ends_with: String + string_not_ends_with: String + boolean: Boolean + boolean_not: Boolean + Person: _PersonFilter } - type _Neo4jLocalTime { - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - formatted: String + input _ReflexiveInterfacedRelationshipTypeFilter { + AND: [_ReflexiveInterfacedRelationshipTypeFilter!] + OR: [_ReflexiveInterfacedRelationshipTypeFilter!] + boolean: Boolean + boolean_not: Boolean + Person: _PersonFilter } - input _Neo4jLocalTimeInput { - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - formatted: String + type _AddActorMoviesPayload + @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { + "Field for the Actor node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Movie node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie } - type _Neo4jLocalDateTime { - year: Int - month: Int - day: Int - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - formatted: String + type _RemoveActorMoviesPayload + @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { + "Field for the Actor node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Movie node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie } - input _Neo4jLocalDateTimeInput { - year: Int - month: Int - day: Int - hour: Int - minute: Int - second: Int - millisecond: Int - microsecond: Int - nanosecond: Int - formatted: String + type _MergeActorMoviesPayload + @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { + "Field for the Actor node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Movie node this ACTED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie } - type User implements Person { - userId: ID! - name: String - interfacedRelationshipType( - first: Int - offset: Int - orderBy: [_InterfacedRelationshipTypeOrdering] - filter: _PersonInterfacedRelationshipTypeFilter - ): [_PersonInterfacedRelationshipType] - reflexiveInterfacedRelationshipType: _PersonReflexiveInterfacedRelationshipTypeDirections - currentUserId(strArg: String = "Neo4j", strInputArg: strInput): String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rated( - rating: Int - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - location: _Neo4jPointInput - first: Int - offset: Int - orderBy: [_RatedOrdering] - filter: _UserRatedFilter - ): [_UserRated] - friends: _UserFriendsDirections - favorites( - first: Int - offset: Int - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] @relation(name: "FAVORITED", direction: "OUT") - movieSearch(first: Int, offset: Int): [MovieSearch] - computedMovieSearch(first: Int, offset: Int): [MovieSearch] - @cypher(statement: "MATCH (ms:MovieSearch) RETURN ms") - extensionScalar: String - _id: String + type _AddActorKnowsPayload + @relation(name: "KNOWS", from: "Actor", to: "Person") { + "Field for the Actor node this KNOWS [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Person node this KNOWS [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person } - "Input object type line description" - input strInput { - "Input field line description" - strArg: String + type _RemoveActorKnowsPayload + @relation(name: "KNOWS", from: "Actor", to: "Person") { + "Field for the Actor node this KNOWS [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Person node this KNOWS [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person } - extend input strInput { - extensionArg: String + type _MergeActorKnowsPayload + @relation(name: "KNOWS", from: "Actor", to: "Person") { + "Field for the Actor node this KNOWS [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Actor + "Field for the Person node this KNOWS [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person } - type _AddUserInterfacedRelationshipTypePayload + type _AddActorInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _RemoveUserInterfacedRelationshipTypePayload + type _RemoveActorInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre } - type _UpdateUserInterfacedRelationshipTypePayload + type _UpdateActorInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _MergeUserInterfacedRelationshipTypePayload + type _MergeActorInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _AddUserReflexiveInterfacedRelationshipTypePayload + type _AddActorReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _RemoveUserReflexiveInterfacedRelationshipTypePayload + type _RemoveActorReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person } - type _UpdateUserReflexiveInterfacedRelationshipTypePayload + type _UpdateActorReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _MergeUserReflexiveInterfacedRelationshipTypePayload + type _MergeActorReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _UserRated @relation(name: "RATED", from: "User", to: "Movie") { - currentUserId(strArg: String): String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String - Movie: Movie + input _ActorInput { + userId: ID! } - type _UserFriendsDirections - @relation(name: "FRIEND_OF", from: "User", to: "User") { - from( - since: Int - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - location: _Neo4jPointInput - ratings: [String] - datetimes: [_Neo4jDateTimeInput] - first: Int - offset: Int - orderBy: [_FriendOfOrdering] - filter: _FriendOfFilter - ): [_UserFriends] - to( - since: Int - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - location: _Neo4jPointInput - ratings: [String] - datetimes: [_Neo4jDateTimeInput] - first: Int - offset: Int - orderBy: [_FriendOfOrdering] - filter: _FriendOfFilter - ): [_UserFriends] + enum _ActorOrdering { + userId_asc + userId_desc + name_asc + name_desc + extensionScalar_asc + extensionScalar_desc + _id_asc + _id_desc } - type _UserFriends @relation(name: "FRIEND_OF", from: "User", to: "User") { - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - since: Int - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - ratings: [String] - datetimes: [_Neo4jDateTime] - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - location: _Neo4jPoint - _id: String - User: User - } - - enum _InterfaceNoScalarsOrdering { - movies_asc - } - - interface InterfaceNoScalars { - movies( - first: Int - offset: Int - orderBy: [_MovieOrdering] - filter: _MovieFilter - ): [Movie] @relation(name: "MOVIES", direction: OUT) - } - - enum _StateOrdering { - name_asc - name_desc - id_asc - id_desc - _id_asc - _id_desc - } - - enum _UserOrdering { - userId_asc - userId_desc - name_asc - name_desc - currentUserId_asc - currentUserId_desc - extensionScalar_asc - extensionScalar_desc - _id_asc - _id_desc - } - - enum _BookOrdering { - genre_asc - genre_desc - _id_asc - _id_desc - } - - input _BookFilter { - AND: [_BookFilter!] - OR: [_BookFilter!] - genre: BookGenre - genre_not: BookGenre - genre_in: [BookGenre!] - genre_not_in: [BookGenre!] - } - - enum BookGenre { - Mystery - Science - } - - extend enum BookGenre { - Math - } - - type Book { - genre: BookGenre - _id: String - } - - type NodeTypeMutationTest { - NodeTypeMutationTest: BookGenre - } - - input _NodeTypeMutationTestInput { - NodeTypeMutationTest: BookGenre! - } - - type currentUserId { - userId: String - _id: String - } - - enum _CasedTypeOrdering { - name_asc - name_desc - _id_asc - _id_desc - } - - input _CasedTypeFilter { - AND: [_CasedTypeFilter!] - OR: [_CasedTypeFilter!] - name: String - name_not: String - name_in: [String!] - name_not_in: [String!] - name_contains: String - name_not_contains: String - name_starts_with: String - name_not_starts_with: String - name_ends_with: String - name_not_ends_with: String - state: _StateFilter - state_not: _StateFilter - state_in: [_StateFilter!] - state_not_in: [_StateFilter!] - } - - type CasedType { - name: String - state(filter: _StateFilter): State - @relation(name: "FILMED_IN", direction: "OUT") - _id: String - } - - "Enum type line description" - enum _PersonOrdering { - "Enum value line description" - userId_asc - """ - Enum value - block - description - """ - userId_desc - name_asc - name_desc - } - - """ - Custom filtering input type - block description - """ - input _PersonFilter { - AND: [_PersonFilter!] - OR: [_PersonFilter!] + input _ActorFilter { + AND: [_ActorFilter!] + OR: [_ActorFilter!] userId: ID userId_not: ID userId_in: [ID!] @@ -1833,6 +1368,46 @@ test.cb('Test augmented schema', t => { name_not_starts_with: String name_ends_with: String name_not_ends_with: String + movies: _MovieFilter + movies_not: _MovieFilter + movies_in: [_MovieFilter!] + movies_not_in: [_MovieFilter!] + movies_some: _MovieFilter + movies_none: _MovieFilter + movies_single: _MovieFilter + movies_every: _MovieFilter + knows: _PersonFilter + knows_not: _PersonFilter + knows_in: [_PersonFilter!] + knows_not_in: [_PersonFilter!] + knows_some: _PersonFilter + knows_none: _PersonFilter + knows_single: _PersonFilter + knows_every: _PersonFilter + extensionScalar: String + extensionScalar_not: String + extensionScalar_in: [String!] + extensionScalar_not_in: [String!] + extensionScalar_contains: String + extensionScalar_not_contains: String + extensionScalar_starts_with: String + extensionScalar_not_starts_with: String + extensionScalar_ends_with: String + extensionScalar_not_ends_with: String + datetimes: [_Neo4jDateTimeInput!] + datetimes_not: [_Neo4jDateTimeInput!] + datetimes_lt: [_Neo4jDateTimeInput!] + datetimes_lte: [_Neo4jDateTimeInput!] + datetimes_gt: [_Neo4jDateTimeInput!] + datetimes_gte: [_Neo4jDateTimeInput!] + strings: [String!] + strings_not: [String!] + strings_contains: [String!] + strings_not_contains: [String!] + strings_starts_with: [String!] + strings_not_starts_with: [String!] + strings_ends_with: [String!] + strings_not_ends_with: [String!] interfacedRelationshipType: _PersonInterfacedRelationshipTypeFilter interfacedRelationshipType_not: _PersonInterfacedRelationshipTypeFilter interfacedRelationshipType_in: [_PersonInterfacedRelationshipTypeFilter!] @@ -1849,80 +1424,191 @@ test.cb('Test augmented schema', t => { reflexiveInterfacedRelationshipType_none: _ReflexiveInterfacedRelationshipTypeDirectionsFilter reflexiveInterfacedRelationshipType_single: _ReflexiveInterfacedRelationshipTypeDirectionsFilter reflexiveInterfacedRelationshipType_every: _ReflexiveInterfacedRelationshipTypeDirectionsFilter - extensionScalar: String - extensionScalar_not: String - extensionScalar_in: [String!] - extensionScalar_not_in: [String!] - extensionScalar_contains: String - extensionScalar_not_contains: String - extensionScalar_starts_with: String - extensionScalar_not_starts_with: String - extensionScalar_ends_with: String - extensionScalar_not_ends_with: String } - type _AddTemporalNodeTemporalNodesPayload - @relation(name: "TEMPORAL", from: "TemporalNode", to: "TemporalNode") { - from: TemporalNode - to: TemporalNode + type Actor { + userId: ID! + name: String + movies( + first: Int + offset: Int + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] @relation(name: "ACTED_IN", direction: "OUT") + knows( + first: Int + offset: Int + orderBy: [_PersonOrdering] + filter: _PersonFilter + ): [Person] @relation(name: "KNOWS", direction: "OUT") + extensionScalar: String + datetimes: [_Neo4jDateTime] + strings: [String] + interfacedRelationshipType( + first: Int + offset: Int + orderBy: [_InterfacedRelationshipTypeOrdering] + filter: _PersonInterfacedRelationshipTypeFilter + ): [_PersonInterfacedRelationshipType] + reflexiveInterfacedRelationshipType: _PersonReflexiveInterfacedRelationshipTypeDirections + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String } - type _RemoveTemporalNodeTemporalNodesPayload - @relation(name: "TEMPORAL", from: "TemporalNode", to: "TemporalNode") { - from: TemporalNode - to: TemporalNode + type _AddUserInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - type _MergeTemporalNodeTemporalNodesPayload - @relation(name: "TEMPORAL", from: "TemporalNode", to: "TemporalNode") { - from: TemporalNode - to: TemporalNode + type _RemoveUserInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre } - input _TemporalNodeInput { - name: String! + type _UpdateUserInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - enum _TemporalNodeOrdering { - datetime_asc - datetime_desc - name_asc - name_desc - time_asc - time_desc - date_asc - date_desc - localtime_asc - localtime_desc - localdatetime_asc - localdatetime_desc - computedTimestamp_asc - computedTimestamp_desc - _id_asc - _id_desc + type _MergeUserInterfacedRelationshipTypePayload + @relation( + name: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Genre + string: String! + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - input _TemporalNodeFilter { - AND: [_TemporalNodeFilter!] - OR: [_TemporalNodeFilter!] - datetime: _Neo4jDateTimeInput - datetime_not: _Neo4jDateTimeInput - datetime_in: [_Neo4jDateTimeInput!] - datetime_not_in: [_Neo4jDateTimeInput!] - datetime_lt: _Neo4jDateTimeInput - datetime_lte: _Neo4jDateTimeInput - datetime_gt: _Neo4jDateTimeInput - datetime_gte: _Neo4jDateTimeInput - name: String - name_not: String - name_in: [String!] - name_not_in: [String!] - name_contains: String - name_not_contains: String - name_starts_with: String - name_not_starts_with: String - name_ends_with: String - name_not_ends_with: String + type _AddUserReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _RemoveUserReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + } + + type _UpdateUserReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _MergeUserReflexiveInterfacedRelationshipTypePayload + @relation( + name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _UserRated @relation(name: "RATED", from: "User", to: "Movie") { + currentUserId(strArg: String): String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + Movie: Movie + } + + input _UserRatedFilter { + AND: [_UserRatedFilter!] + OR: [_UserRatedFilter!] + rating: Int + rating_not: Int + rating_in: [Int!] + rating_not_in: [Int!] + rating_lt: Int + rating_lte: Int + rating_gt: Int + rating_gte: Int + ratings: [Int!] + ratings_not: [Int!] + ratings_lt: [Int!] + ratings_lte: [Int!] + ratings_gt: [Int!] + ratings_gte: [Int!] time: _Neo4jTimeInput time_not: _Neo4jTimeInput time_in: [_Neo4jTimeInput!] @@ -1939,6 +1625,14 @@ test.cb('Test augmented schema', t => { date_lte: _Neo4jDateInput date_gt: _Neo4jDateInput date_gte: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + datetime_not: _Neo4jDateTimeInput + datetime_in: [_Neo4jDateTimeInput!] + datetime_not_in: [_Neo4jDateTimeInput!] + datetime_lt: _Neo4jDateTimeInput + datetime_lte: _Neo4jDateTimeInput + datetime_gt: _Neo4jDateTimeInput + datetime_gte: _Neo4jDateTimeInput localtime: _Neo4jLocalTimeInput localtime_not: _Neo4jLocalTimeInput localtime_in: [_Neo4jLocalTimeInput!] @@ -1955,437 +1649,407 @@ test.cb('Test augmented schema', t => { localdatetime_lte: _Neo4jLocalDateTimeInput localdatetime_gt: _Neo4jLocalDateTimeInput localdatetime_gte: _Neo4jLocalDateTimeInput - localdatetimes: [_Neo4jLocalDateTimeInput!] - localdatetimes_not: [_Neo4jLocalDateTimeInput!] - localdatetimes_lt: [_Neo4jLocalDateTimeInput!] - localdatetimes_lte: [_Neo4jLocalDateTimeInput!] - localdatetimes_gt: [_Neo4jLocalDateTimeInput!] - localdatetimes_gte: [_Neo4jLocalDateTimeInput!] - temporalNodes: _TemporalNodeFilter - temporalNodes_not: _TemporalNodeFilter - temporalNodes_in: [_TemporalNodeFilter!] - temporalNodes_not_in: [_TemporalNodeFilter!] - temporalNodes_some: _TemporalNodeFilter - temporalNodes_none: _TemporalNodeFilter - temporalNodes_single: _TemporalNodeFilter - temporalNodes_every: _TemporalNodeFilter + datetimes: [_Neo4jDateTimeInput!] + datetimes_not: [_Neo4jDateTimeInput!] + datetimes_lt: [_Neo4jDateTimeInput!] + datetimes_lte: [_Neo4jDateTimeInput!] + datetimes_gt: [_Neo4jDateTimeInput!] + datetimes_gte: [_Neo4jDateTimeInput!] + location: _Neo4jPointInput + location_not: _Neo4jPointInput + location_distance: _Neo4jPointDistanceFilter + location_distance_lt: _Neo4jPointDistanceFilter + location_distance_lte: _Neo4jPointDistanceFilter + location_distance_gt: _Neo4jPointDistanceFilter + location_distance_gte: _Neo4jPointDistanceFilter + Movie: _MovieFilter } - type TemporalNode { - datetime: _Neo4jDateTime - name: String + type _AddUserRatedPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] time: _Neo4jTime date: _Neo4jDate + datetime: _Neo4jDateTime localtime: _Neo4jLocalTime localdatetime: _Neo4jLocalDateTime - localdatetimes: [_Neo4jLocalDateTime] - computedTimestamp: String - @cypher(statement: "RETURN toString(datetime())") - temporalNodes( - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - first: Int - offset: Int - orderBy: [_TemporalNodeOrdering] - filter: _TemporalNodeFilter - ): [TemporalNode] @relation(name: "TEMPORAL", direction: OUT) + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - enum _SpatialNodeOrdering { - id_asc - id_desc - _id_asc - _id_desc + type _RemoveUserRatedPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie } - type SpatialNode { - id: ID! - point: _Neo4jPoint - spatialNodes( - point: _Neo4jPointInput - first: Int - offset: Int - orderBy: [_SpatialNodeOrdering] - filter: _SpatialNodeFilter - ): [SpatialNode] @relation(name: "SPATIAL", direction: OUT) + type _UpdateUserRatedPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - enum _CameraOrdering { - id_asc - id_desc - type_asc - type_desc - make_asc - make_desc - weight_asc - weight_desc - } - - input _CameraFilter { - AND: [_CameraFilter!] - OR: [_CameraFilter!] - id: ID - id_not: ID - id_in: [ID!] - id_not_in: [ID!] - id_contains: ID - id_not_contains: ID - id_starts_with: ID - id_not_starts_with: ID - id_ends_with: ID - id_not_ends_with: ID - type: String - type_not: String - type_in: [String!] - type_not_in: [String!] - type_contains: String - type_not_contains: String - type_starts_with: String - type_not_starts_with: String - type_ends_with: String - type_not_ends_with: String - make: String - make_not: String - make_in: [String!] - make_not_in: [String!] - make_contains: String - make_not_contains: String - make_starts_with: String - make_not_starts_with: String - make_ends_with: String - make_not_ends_with: String - weight: Int - weight_not: Int - weight_in: [Int!] - weight_not_in: [Int!] - weight_lt: Int - weight_lte: Int - weight_gt: Int - weight_gte: Int - operators: _PersonFilter - operators_not: _PersonFilter - operators_in: [_PersonFilter!] - operators_not_in: [_PersonFilter!] - operators_some: _PersonFilter - operators_none: _PersonFilter - operators_single: _PersonFilter - operators_every: _PersonFilter + type _MergeUserRatedPayload + @relation(name: "RATED", from: "User", to: "Movie") { + "Field for the User node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this RATED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + rating: Int + ratings: [Int] + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + datetimes: [_Neo4jDateTime] + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String } - interface Camera { - type: String - id: ID! @unique - make: String - weight: Int - operators( - first: Int - offset: Int - orderBy: [_PersonOrdering] - filter: _PersonFilter - ): [Person] @relation(name: "cameras", direction: IN) - computedOperators( - name: String + type _UserFriendsDirections + @relation(name: "FRIEND_OF", from: "User", to: "User") { + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from( + since: Int + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + location: _Neo4jPointInput + ratings: [String] + datetimes: [_Neo4jDateTimeInput] first: Int offset: Int - orderBy: [_PersonOrdering] - ): [Person] - @cypher(statement: "MATCH (this)<-[:cameras]-(p:Person) RETURN p") - reflexiveInterfaceRelationship( + orderBy: [_FriendOfOrdering] + filter: _FriendOfFilter + ): [_UserFriends] + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to( + since: Int + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + location: _Neo4jPointInput + ratings: [String] + datetimes: [_Neo4jDateTimeInput] first: Int offset: Int - orderBy: [_CameraOrdering] - filter: _CameraFilter - ): [Camera] - @relation(name: "REFLEXIVE_INTERFACE_RELATIONSHIP", direction: OUT) - } - - enum _OldCameraOrdering { - type_asc - type_desc - id_asc - id_desc - make_asc - make_desc - weight_asc - weight_desc - smell_asc - smell_desc - _id_asc - _id_desc - } - - input _OldCameraFilter { - AND: [_OldCameraFilter!] - OR: [_OldCameraFilter!] - type: String - type_not: String - type_in: [String!] - type_not_in: [String!] - type_contains: String - type_not_contains: String - type_starts_with: String - type_not_starts_with: String - type_ends_with: String - type_not_ends_with: String - id: ID - id_not: ID - id_in: [ID!] - id_not_in: [ID!] - id_contains: ID - id_not_contains: ID - id_starts_with: ID - id_not_starts_with: ID - id_ends_with: ID - id_not_ends_with: ID - make: String - make_not: String - make_in: [String!] - make_not_in: [String!] - make_contains: String - make_not_contains: String - make_starts_with: String - make_not_starts_with: String - make_ends_with: String - make_not_ends_with: String - weight: Int - weight_not: Int - weight_in: [Int!] - weight_not_in: [Int!] - weight_lt: Int - weight_lte: Int - weight_gt: Int - weight_gte: Int - smell: String - smell_not: String - smell_in: [String!] - smell_not_in: [String!] - smell_contains: String - smell_not_contains: String - smell_starts_with: String - smell_not_starts_with: String - smell_ends_with: String - smell_not_ends_with: String - operators: _PersonFilter - operators_not: _PersonFilter - operators_in: [_PersonFilter!] - operators_not_in: [_PersonFilter!] - operators_some: _PersonFilter - operators_none: _PersonFilter - operators_single: _PersonFilter - operators_every: _PersonFilter - reflexiveInterfaceRelationship: _CameraFilter - reflexiveInterfaceRelationship_not: _CameraFilter - reflexiveInterfaceRelationship_in: [_CameraFilter!] - reflexiveInterfaceRelationship_not_in: [_CameraFilter!] - reflexiveInterfaceRelationship_some: _CameraFilter - reflexiveInterfaceRelationship_none: _CameraFilter - reflexiveInterfaceRelationship_single: _CameraFilter - reflexiveInterfaceRelationship_every: _CameraFilter + orderBy: [_FriendOfOrdering] + filter: _FriendOfFilter + ): [_UserFriends] } - type OldCamera implements Camera { - type: String - id: ID! @unique - make: String - weight: Int - smell: String - operators( - first: Int - offset: Int - orderBy: [_PersonOrdering] - filter: _PersonFilter - ): [Person] @relation(name: "cameras", direction: IN) - computedOperators( - name: String - first: Int - offset: Int - orderBy: [_PersonOrdering] - ): [Person] - @cypher(statement: "MATCH (this)<-[:cameras]-(p:Person) RETURN p") - reflexiveInterfaceRelationship( - first: Int - offset: Int - orderBy: [_CameraOrdering] - filter: _CameraFilter - ): [Camera] - @relation(name: "REFLEXIVE_INTERFACE_RELATIONSHIP", direction: OUT) + type _UserFriends @relation(name: "FRIEND_OF", from: "User", to: "User") { + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + since: Int + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + ratings: [String] + datetimes: [_Neo4jDateTime] + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + User: User } - enum _NewCameraOrdering { - type_asc - type_desc - id_asc - id_desc - make_asc - make_desc - weight_asc - weight_desc - _id_asc - _id_desc + input _FriendOfDirectionsFilter { + from: _FriendOfFilter + to: _FriendOfFilter } - input _NewCameraFilter { - AND: [_NewCameraFilter!] - OR: [_NewCameraFilter!] - type: String - type_not: String - type_in: [String!] - type_not_in: [String!] - type_contains: String - type_not_contains: String - type_starts_with: String - type_not_starts_with: String - type_ends_with: String - type_not_ends_with: String - id: ID - id_not: ID - id_in: [ID!] - id_not_in: [ID!] - id_contains: ID - id_not_contains: ID - id_starts_with: ID - id_not_starts_with: ID - id_ends_with: ID - id_not_ends_with: ID - make: String - make_not: String - make_in: [String!] - make_not_in: [String!] - make_contains: String - make_not_contains: String - make_starts_with: String - make_not_starts_with: String - make_ends_with: String - make_not_ends_with: String - weight: Int - weight_not: Int - weight_in: [Int!] - weight_not_in: [Int!] - weight_lt: Int - weight_lte: Int - weight_gt: Int - weight_gte: Int - features: [String!] - features_not: [String!] - features_contains: [String!] - features_not_contains: [String!] - features_starts_with: [String!] - features_not_starts_with: [String!] - features_ends_with: [String!] - features_not_ends_with: [String!] - operators: _PersonFilter - operators_not: _PersonFilter - operators_in: [_PersonFilter!] - operators_not_in: [_PersonFilter!] - operators_some: _PersonFilter - operators_none: _PersonFilter - operators_single: _PersonFilter - operators_every: _PersonFilter - reflexiveInterfaceRelationship: _CameraFilter - reflexiveInterfaceRelationship_not: _CameraFilter - reflexiveInterfaceRelationship_in: [_CameraFilter!] - reflexiveInterfaceRelationship_not_in: [_CameraFilter!] - reflexiveInterfaceRelationship_some: _CameraFilter - reflexiveInterfaceRelationship_none: _CameraFilter - reflexiveInterfaceRelationship_single: _CameraFilter - reflexiveInterfaceRelationship_every: _CameraFilter + input _FriendOfFilter { + AND: [_FriendOfFilter!] + OR: [_FriendOfFilter!] + since: Int + since_not: Int + since_in: [Int!] + since_not_in: [Int!] + since_lt: Int + since_lte: Int + since_gt: Int + since_gte: Int + time: _Neo4jTimeInput + time_not: _Neo4jTimeInput + time_in: [_Neo4jTimeInput!] + time_not_in: [_Neo4jTimeInput!] + time_lt: _Neo4jTimeInput + time_lte: _Neo4jTimeInput + time_gt: _Neo4jTimeInput + time_gte: _Neo4jTimeInput + date: _Neo4jDateInput + date_not: _Neo4jDateInput + date_in: [_Neo4jDateInput!] + date_not_in: [_Neo4jDateInput!] + date_lt: _Neo4jDateInput + date_lte: _Neo4jDateInput + date_gt: _Neo4jDateInput + date_gte: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + datetime_not: _Neo4jDateTimeInput + datetime_in: [_Neo4jDateTimeInput!] + datetime_not_in: [_Neo4jDateTimeInput!] + datetime_lt: _Neo4jDateTimeInput + datetime_lte: _Neo4jDateTimeInput + datetime_gt: _Neo4jDateTimeInput + datetime_gte: _Neo4jDateTimeInput + ratings: [String!] + ratings_not: [String!] + ratings_contains: [String!] + ratings_not_contains: [String!] + ratings_starts_with: [String!] + ratings_not_starts_with: [String!] + ratings_ends_with: [String!] + ratings_not_ends_with: [String!] + datetimes: [_Neo4jDateTimeInput!] + datetimes_not: [_Neo4jDateTimeInput!] + datetimes_lt: [_Neo4jDateTimeInput!] + datetimes_lte: [_Neo4jDateTimeInput!] + datetimes_gt: [_Neo4jDateTimeInput!] + datetimes_gte: [_Neo4jDateTimeInput!] + localtime: _Neo4jLocalTimeInput + localtime_not: _Neo4jLocalTimeInput + localtime_in: [_Neo4jLocalTimeInput!] + localtime_not_in: [_Neo4jLocalTimeInput!] + localtime_lt: _Neo4jLocalTimeInput + localtime_lte: _Neo4jLocalTimeInput + localtime_gt: _Neo4jLocalTimeInput + localtime_gte: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetime_not: _Neo4jLocalDateTimeInput + localdatetime_in: [_Neo4jLocalDateTimeInput!] + localdatetime_not_in: [_Neo4jLocalDateTimeInput!] + localdatetime_lt: _Neo4jLocalDateTimeInput + localdatetime_lte: _Neo4jLocalDateTimeInput + localdatetime_gt: _Neo4jLocalDateTimeInput + localdatetime_gte: _Neo4jLocalDateTimeInput + location: _Neo4jPointInput + location_not: _Neo4jPointInput + location_distance: _Neo4jPointDistanceFilter + location_distance_lt: _Neo4jPointDistanceFilter + location_distance_lte: _Neo4jPointDistanceFilter + location_distance_gt: _Neo4jPointDistanceFilter + location_distance_gte: _Neo4jPointDistanceFilter + User: _UserFilter } - type NewCamera implements Camera { - type: String - id: ID! @unique - make: String - weight: Int - features: [String] - operators( - first: Int - offset: Int - orderBy: [_PersonOrdering] - filter: _PersonFilter - ): [Person] @relation(name: "cameras", direction: IN) - computedOperators( - name: String - first: Int - offset: Int - orderBy: [_PersonOrdering] - ): [Person] - @cypher(statement: "MATCH (this)<-[:cameras]-(p:Person) RETURN p") - reflexiveInterfaceRelationship( - first: Int - offset: Int - orderBy: [_CameraOrdering] - filter: _CameraFilter - ): [Camera] - @relation(name: "REFLEXIVE_INTERFACE_RELATIONSHIP", direction: OUT) + enum _FriendOfOrdering { + currentUserId_asc + currentUserId_desc + since_asc + since_desc + time_asc + time_desc + date_asc + date_desc + datetime_asc + datetime_desc + localtime_asc + localtime_desc + localdatetime_asc + localdatetime_desc + _id_asc + _id_desc + } + + input _FriendOfInput { + since: Int + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + ratings: [String] + datetimes: [_Neo4jDateTimeInput] + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + location: _Neo4jPointInput + } + + type _AddUserFriendsPayload + @relation(name: "FRIEND_OF", from: "User", to: "User") { + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: User + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + since: Int + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + ratings: [String] + datetimes: [_Neo4jDateTime] + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - enum _CameraManOrdering { - userId_asc - userId_desc - name_asc - name_desc - extensionScalar_asc - extensionScalar_desc - _id_asc - _id_desc + type _RemoveUserFriendsPayload + @relation(name: "FRIEND_OF", from: "User", to: "User") { + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: User } - input _CameraManFilter { - AND: [_CameraManFilter!] - OR: [_CameraManFilter!] - userId: ID - userId_not: ID - userId_in: [ID!] - userId_not_in: [ID!] - userId_contains: ID - userId_not_contains: ID - userId_starts_with: ID - userId_not_starts_with: ID - userId_ends_with: ID - userId_not_ends_with: ID - name: String - name_not: String - name_in: [String!] - name_not_in: [String!] - name_contains: String - name_not_contains: String - name_starts_with: String - name_not_starts_with: String - name_ends_with: String - name_not_ends_with: String - favoriteCamera: _CameraFilter - favoriteCamera_not: _CameraFilter - favoriteCamera_in: [_CameraFilter!] - favoriteCamera_not_in: [_CameraFilter!] - cameras: _CameraFilter - cameras_not: _CameraFilter - cameras_in: [_CameraFilter!] - cameras_not_in: [_CameraFilter!] - cameras_some: _CameraFilter - cameras_none: _CameraFilter - cameras_single: _CameraFilter - cameras_every: _CameraFilter - cameraBuddy: _PersonFilter - cameraBuddy_not: _PersonFilter - cameraBuddy_in: [_PersonFilter!] - cameraBuddy_not_in: [_PersonFilter!] - extensionScalar: String - extensionScalar_not: String - extensionScalar_in: [String!] - extensionScalar_not_in: [String!] - extensionScalar_contains: String - extensionScalar_not_contains: String - extensionScalar_starts_with: String - extensionScalar_not_starts_with: String - extensionScalar_ends_with: String - extensionScalar_not_ends_with: String + type _UpdateUserFriendsPayload + @relation(name: "FRIEND_OF", from: "User", to: "User") { + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: User + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + since: Int + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + ratings: [String] + datetimes: [_Neo4jDateTime] + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _MergeUserFriendsPayload + @relation(name: "FRIEND_OF", from: "User", to: "User") { + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the User node this FRIEND_OF [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: User + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + since: Int + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + ratings: [String] + datetimes: [_Neo4jDateTime] + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + location: _Neo4jPoint + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." + _id: String + } + + type _AddUserFavoritesPayload + @relation(name: "FAVORITED", from: "User", to: "Movie") { + "Field for the User node this FAVORITED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this FAVORITED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } + + type _RemoveUserFavoritesPayload + @relation(name: "FAVORITED", from: "User", to: "Movie") { + "Field for the User node this FAVORITED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this FAVORITED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } + + type _MergeUserFavoritesPayload + @relation(name: "FAVORITED", from: "User", to: "Movie") { + "Field for the User node this FAVORITED [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: User + "Field for the Movie node this FAVORITED [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Movie + } + + input _UserInput { + userId: ID! + } + + enum _UserOrdering { + userId_asc + userId_desc + name_asc + name_desc + currentUserId_asc + currentUserId_desc + extensionScalar_asc + extensionScalar_desc + _id_asc + _id_desc + } + + input _UserFilter { + AND: [_UserFilter!] + OR: [_UserFilter!] + userId: ID + userId_not: ID + userId_in: [ID!] + userId_not_in: [ID!] + userId_contains: ID + userId_not_contains: ID + userId_starts_with: ID + userId_not_starts_with: ID + userId_ends_with: ID + userId_not_ends_with: ID + name: String + name_not: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_not_contains: String + name_starts_with: String + name_not_starts_with: String + name_ends_with: String + name_not_ends_with: String interfacedRelationshipType: _PersonInterfacedRelationshipTypeFilter interfacedRelationshipType_not: _PersonInterfacedRelationshipTypeFilter interfacedRelationshipType_in: [_PersonInterfacedRelationshipTypeFilter!] @@ -2402,2240 +2066,107 @@ test.cb('Test augmented schema', t => { reflexiveInterfacedRelationshipType_none: _ReflexiveInterfacedRelationshipTypeDirectionsFilter reflexiveInterfacedRelationshipType_single: _ReflexiveInterfacedRelationshipTypeDirectionsFilter reflexiveInterfacedRelationshipType_every: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + rated: _UserRatedFilter + rated_not: _UserRatedFilter + rated_in: [_UserRatedFilter!] + rated_not_in: [_UserRatedFilter!] + rated_some: _UserRatedFilter + rated_none: _UserRatedFilter + rated_single: _UserRatedFilter + rated_every: _UserRatedFilter + friends: _FriendOfDirectionsFilter + friends_not: _FriendOfDirectionsFilter + friends_in: [_FriendOfDirectionsFilter!] + friends_not_in: [_FriendOfDirectionsFilter!] + friends_some: _FriendOfDirectionsFilter + friends_none: _FriendOfDirectionsFilter + friends_single: _FriendOfDirectionsFilter + friends_every: _FriendOfDirectionsFilter + favorites: _MovieFilter + favorites_not: _MovieFilter + favorites_in: [_MovieFilter!] + favorites_not_in: [_MovieFilter!] + favorites_some: _MovieFilter + favorites_none: _MovieFilter + favorites_single: _MovieFilter + favorites_every: _MovieFilter + extensionScalar: String + extensionScalar_not: String + extensionScalar_in: [String!] + extensionScalar_not_in: [String!] + extensionScalar_contains: String + extensionScalar_not_contains: String + extensionScalar_starts_with: String + extensionScalar_not_starts_with: String + extensionScalar_ends_with: String + extensionScalar_not_ends_with: String } - """ - Union type - block description - """ - union MovieSearch = Movie | Genre | Book - - extend union MovieSearch = Actor | OldCamera - - type CameraMan implements Person { + type User implements Person { userId: ID! name: String - favoriteCamera(filter: _CameraFilter): Camera - @relation(name: "favoriteCamera", direction: "OUT") - heaviestCamera( + interfacedRelationshipType( first: Int offset: Int - orderBy: [_CameraOrdering] - ): [Camera] + orderBy: [_InterfacedRelationshipTypeOrdering] + filter: _PersonInterfacedRelationshipTypeFilter + ): [_PersonInterfacedRelationshipType] + reflexiveInterfacedRelationshipType: _PersonReflexiveInterfacedRelationshipTypeDirections + currentUserId(strArg: String = "Neo4j", strInputArg: strInput): String @cypher( - statement: "MATCH (c: Camera)--(this) RETURN c ORDER BY c.weight DESC LIMIT 1" + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" ) - cameras( + rated( + rating: Int + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + location: _Neo4jPointInput first: Int offset: Int - orderBy: [_CameraOrdering] - filter: _CameraFilter - ): [Camera!]! @relation(name: "cameras", direction: "OUT") - cameraBuddy(filter: _PersonFilter): Person - @relation(name: "cameraBuddy", direction: "OUT") - extensionScalar: String - interfacedRelationshipType( + orderBy: [_RatedOrdering] + filter: _UserRatedFilter + ): [_UserRated] + friends: _UserFriendsDirections + favorites( first: Int offset: Int - orderBy: [_InterfacedRelationshipTypeOrdering] - filter: _PersonInterfacedRelationshipTypeFilter - ): [_PersonInterfacedRelationshipType] - reflexiveInterfacedRelationshipType: _PersonReflexiveInterfacedRelationshipTypeDirections + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] @relation(name: "FAVORITED", direction: "OUT") + movieSearch(first: Int, offset: Int): [MovieSearch] + computedMovieSearch(first: Int, offset: Int): [MovieSearch] + @cypher(statement: "MATCH (ms:MovieSearch) RETURN ms") + extensionScalar: String + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." _id: String } - input _SpatialNodeFilter { - AND: [_SpatialNodeFilter!] - OR: [_SpatialNodeFilter!] - id: ID - id_not: ID - id_in: [ID!] - id_not_in: [ID!] - id_contains: ID - id_not_contains: ID - id_starts_with: ID - id_not_starts_with: ID - id_ends_with: ID - id_not_ends_with: ID - point: _Neo4jPointInput - point_not: _Neo4jPointInput - point_distance: _Neo4jPointDistanceFilter - point_distance_lt: _Neo4jPointDistanceFilter - point_distance_lte: _Neo4jPointDistanceFilter - point_distance_gt: _Neo4jPointDistanceFilter - point_distance_gte: _Neo4jPointDistanceFilter - spatialNodes: _SpatialNodeFilter - spatialNodes_not: _SpatialNodeFilter - spatialNodes_in: [_SpatialNodeFilter!] - spatialNodes_not_in: [_SpatialNodeFilter!] - spatialNodes_some: _SpatialNodeFilter - spatialNodes_none: _SpatialNodeFilter - spatialNodes_single: _SpatialNodeFilter - spatialNodes_every: _SpatialNodeFilter - } - - "Mutation type line description" - type Mutation { - "Mutation field line description" + type FriendOf @relation { + from: User currentUserId: String - @cypher(statement: "RETURN $cypherParams.currentUserId") - """ - Mutation field - block - description - """ - computedObjectWithCypherParams: currentUserId - @cypher(statement: "RETURN { userId: $cypherParams.currentUserId }") - computedTemporal: _Neo4jDateTime - @cypher( - statement: "WITH datetime() AS now RETURN { year: now.year, month: now.month , day: now.day , hour: now.hour , minute: now.minute , second: now.second , millisecond: now.millisecond , microsecond: now.microsecond , nanosecond: now.nanosecond , timezone: now.timezone , formatted: toString(now) }" - ) - computedSpatial: _Neo4jPoint @cypher( - statement: "WITH point({ x: 10, y: 20, z: 15 }) AS instance RETURN { x: instance.x, y: instance.y, z: instance.z, crs: instance.crs }" + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" ) - computedStringList: [String] - @cypher( - statement: "UNWIND ['hello', 'world'] AS stringList RETURN stringList" - ) - customWithArguments( - """ - Mutation field argument - block description - """ - strArg: String - strInputArg: strInput - ): String @cypher(statement: "RETURN $strInputArg.strArg") - testPublish: Boolean @neo4j_ignore - computedMovieSearch: [MovieSearch] - @cypher(statement: "MATCH (ms:MovieSearch) RETURN ms") - customCreateNode( - integer: Int - datetime: _Neo4jDateTimeInput - integers: [Int] - datetimes: [_Neo4jDateTimeInput] - point: _Neo4jPointInput - points: [_Neo4jPointInput] - ): Boolean + since: Int + time: _Neo4jTime + date: _Neo4jDate + datetime: _Neo4jDateTime + ratings: [String] + datetimes: [_Neo4jDateTime] + localtime: _Neo4jLocalTime + localdatetime: _Neo4jLocalDateTime + location: _Neo4jPoint + to: User + } + + type Rated @relation { + from: User + currentUserId(strArg: String): String @cypher( - statement: "CREATE (n:Node { integer: $integer, datetime: datetime($datetime), point: point($point), integers: $integers, datetimes: [value IN $datetimes | datetime(value)], points: [value IN $points | point(value)] }) RETURN TRUE" - ) - AddMovieExtensionNode( - from: _MovieInput! - to: _GenreInput! - ): _AddMovieExtensionNodePayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: [ - "Movie: Create" - "create:movie" - "Genre: Create" - "create:genre" - ] - ) - RemoveMovieExtensionNode( - from: _MovieInput! - to: _GenreInput! - ): _RemoveMovieExtensionNodePayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: [ - "Movie: Delete" - "delete:movie" - "Genre: Delete" - "delete:genre" - ] - ) - MergeMovieExtensionNode( - from: _MovieInput! - to: _GenreInput! - ): _MergeMovieExtensionNodePayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: ["Movie: Merge", "merge:movie", "Genre: Merge", "merge:genre"] - ) - AddMovieGenres( - from: _MovieInput! - to: _GenreInput! - ): _AddMovieGenresPayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: [ - "Movie: Create" - "create:movie" - "Genre: Create" - "create:genre" - ] - ) - RemoveMovieGenres( - from: _MovieInput! - to: _GenreInput! - ): _RemoveMovieGenresPayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: [ - "Movie: Delete" - "delete:movie" - "Genre: Delete" - "delete:genre" - ] - ) - MergeMovieGenres( - from: _MovieInput! - to: _GenreInput! - ): _MergeMovieGenresPayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: ["Movie: Merge", "merge:movie", "Genre: Merge", "merge:genre"] - ) - AddMovieActors( - from: _ActorInput! - to: _MovieInput! - ): _AddMovieActorsPayload - @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") - @hasScope( - scopes: [ - "Actor: Create" - "create:actor" - "Movie: Create" - "create:movie" - ] - ) - RemoveMovieActors( - from: _ActorInput! - to: _MovieInput! - ): _RemoveMovieActorsPayload - @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") - @hasScope( - scopes: [ - "Actor: Delete" - "delete:actor" - "Movie: Delete" - "delete:movie" - ] - ) - MergeMovieActors( - from: _ActorInput! - to: _MovieInput! - ): _MergeMovieActorsPayload - @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") - @hasScope( - scopes: ["Actor: Merge", "merge:actor", "Movie: Merge", "merge:movie"] - ) - AddMovieFilmedIn( - from: _MovieInput! - to: _StateInput! - ): _AddMovieFilmedInPayload - @MutationMeta(relationship: "FILMED_IN", from: "Movie", to: "State") - @hasScope( - scopes: [ - "Movie: Create" - "create:movie" - "State: Create" - "create:state" - ] - ) - RemoveMovieFilmedIn( - from: _MovieInput! - to: _StateInput! - ): _RemoveMovieFilmedInPayload - @MutationMeta(relationship: "FILMED_IN", from: "Movie", to: "State") - @hasScope( - scopes: [ - "Movie: Delete" - "delete:movie" - "State: Delete" - "delete:state" - ] - ) - MergeMovieFilmedIn( - from: _MovieInput! - to: _StateInput! - ): _MergeMovieFilmedInPayload - @MutationMeta(relationship: "FILMED_IN", from: "Movie", to: "State") - @hasScope( - scopes: ["Movie: Merge", "merge:movie", "State: Merge", "merge:state"] - ) - AddMovieRatings( - from: _UserInput! - to: _MovieInput! - data: _RatedInput! - ): _AddMovieRatingsPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Create" - "create:user" - "Movie: Create" - "create:movie" - ] - ) - RemoveMovieRatings( - from: _UserInput! - to: _MovieInput! - ): _RemoveMovieRatingsPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Delete" - "delete:user" - "Movie: Delete" - "delete:movie" - ] - ) - UpdateMovieRatings( - from: _UserInput! - to: _MovieInput! - data: _RatedInput! - ): _UpdateMovieRatingsPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Update" - "update:user" - "Movie: Update" - "update:movie" - ] - ) - MergeMovieRatings( - from: _UserInput! - to: _MovieInput! - data: _RatedInput! - ): _MergeMovieRatingsPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: ["User: Merge", "merge:user", "Movie: Merge", "merge:movie"] - ) - CreateMovie( - movieId: ID - title: String - someprefix_title_with_underscores: String - year: Int - released: _Neo4jDateTimeInput - plot: String - poster: String - imdbRating: Float - avgStars: Float - location: _Neo4jPointInput - locations: [_Neo4jPointInput] - years: [Int] - titles: [String] - imdbRatings: [Float] - releases: [_Neo4jDateTimeInput] - booleans: [Boolean] - enums: [BookGenre] - extensionScalar: String - ): Movie @hasScope(scopes: ["Movie: Create", "create:movie"]) - UpdateMovie( - movieId: ID! - title: String - someprefix_title_with_underscores: String - year: Int - released: _Neo4jDateTimeInput - plot: String - poster: String - imdbRating: Float - avgStars: Float - location: _Neo4jPointInput - locations: [_Neo4jPointInput] - years: [Int] - titles: [String] - imdbRatings: [Float] - releases: [_Neo4jDateTimeInput] - booleans: [Boolean] - enums: [BookGenre] - extensionScalar: String - ): Movie @hasScope(scopes: ["Movie: Update", "update:movie"]) - DeleteMovie(movieId: ID!): Movie - @hasScope(scopes: ["Movie: Delete", "delete:movie"]) - MergeMovie( - movieId: ID! - title: String - someprefix_title_with_underscores: String - year: Int - released: _Neo4jDateTimeInput - plot: String - poster: String - imdbRating: Float - avgStars: Float - location: _Neo4jPointInput - locations: [_Neo4jPointInput] - years: [Int] - titles: [String] - imdbRatings: [Float] - releases: [_Neo4jDateTimeInput] - booleans: [Boolean] - enums: [BookGenre] - extensionScalar: String - ): Movie @hasScope(scopes: ["Movie: Merge", "merge:movie"]) - AddGenreMovies( - from: _MovieInput! - to: _GenreInput! - ): _AddGenreMoviesPayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: [ - "Movie: Create" - "create:movie" - "Genre: Create" - "create:genre" - ] - ) - RemoveGenreMovies( - from: _MovieInput! - to: _GenreInput! - ): _RemoveGenreMoviesPayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: [ - "Movie: Delete" - "delete:movie" - "Genre: Delete" - "delete:genre" - ] - ) - MergeGenreMovies( - from: _MovieInput! - to: _GenreInput! - ): _MergeGenreMoviesPayload - @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") - @hasScope( - scopes: ["Movie: Merge", "merge:movie", "Genre: Merge", "merge:genre"] - ) - AddGenreInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _AddGenreInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Genre: Create" - "create:genre" - ] - ) - RemoveGenreInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - ): _RemoveGenreInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Genre: Delete" - "delete:genre" - ] - ) - UpdateGenreInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _UpdateGenreInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Genre: Update" - "update:genre" - ] - ) - MergeGenreInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _MergeGenreInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Genre: Merge" - "merge:genre" - ] - ) - CreateGenre(name: String): Genre - @hasScope(scopes: ["Genre: Create", "create:genre"]) - DeleteGenre(name: String!): Genre - @hasScope(scopes: ["Genre: Delete", "delete:genre"]) - MergeGenre(name: String!): Genre - @hasScope(scopes: ["Genre: Merge", "merge:genre"]) - CreateState(name: String!, id: ID): State - @hasScope(scopes: ["State: Create", "create:state"]) - UpdateState(name: String!, id: ID): State - @hasScope(scopes: ["State: Update", "update:state"]) - DeleteState(name: String!): State - @hasScope(scopes: ["State: Delete", "delete:state"]) - MergeState(name: String!, id: ID): State - @hasScope(scopes: ["State: Merge", "merge:state"]) - AddPersonInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _AddPersonInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Genre: Create" - "create:genre" - ] - ) - RemovePersonInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - ): _RemovePersonInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Genre: Delete" - "delete:genre" - ] - ) - UpdatePersonInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _UpdatePersonInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Genre: Update" - "update:genre" - ] - ) - MergePersonInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _MergePersonInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Genre: Merge" - "merge:genre" - ] - ) - AddPersonReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _AddPersonReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Person: Create" - "create:person" - ] - ) - RemovePersonReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - ): _RemovePersonReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Person: Delete" - "delete:person" - ] - ) - UpdatePersonReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _UpdatePersonReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Person: Update" - "update:person" - ] - ) - MergePersonReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _MergePersonReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Person: Merge" - "merge:person" - ] - ) - AddActorMovies( - from: _ActorInput! - to: _MovieInput! - ): _AddActorMoviesPayload - @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") - @hasScope( - scopes: [ - "Actor: Create" - "create:actor" - "Movie: Create" - "create:movie" - ] - ) - RemoveActorMovies( - from: _ActorInput! - to: _MovieInput! - ): _RemoveActorMoviesPayload - @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") - @hasScope( - scopes: [ - "Actor: Delete" - "delete:actor" - "Movie: Delete" - "delete:movie" - ] - ) - MergeActorMovies( - from: _ActorInput! - to: _MovieInput! - ): _MergeActorMoviesPayload - @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") - @hasScope( - scopes: ["Actor: Merge", "merge:actor", "Movie: Merge", "merge:movie"] - ) - AddActorKnows( - from: _ActorInput! - to: _PersonInput! - ): _AddActorKnowsPayload - @MutationMeta(relationship: "KNOWS", from: "Actor", to: "Person") - @hasScope( - scopes: [ - "Actor: Create" - "create:actor" - "Person: Create" - "create:person" - ] - ) - RemoveActorKnows( - from: _ActorInput! - to: _PersonInput! - ): _RemoveActorKnowsPayload - @MutationMeta(relationship: "KNOWS", from: "Actor", to: "Person") - @hasScope( - scopes: [ - "Actor: Delete" - "delete:actor" - "Person: Delete" - "delete:person" - ] - ) - MergeActorKnows( - from: _ActorInput! - to: _PersonInput! - ): _MergeActorKnowsPayload - @MutationMeta(relationship: "KNOWS", from: "Actor", to: "Person") - @hasScope( - scopes: [ - "Actor: Merge" - "merge:actor" - "Person: Merge" - "merge:person" - ] - ) - AddActorInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _AddActorInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Genre: Create" - "create:genre" - ] - ) - RemoveActorInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - ): _RemoveActorInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Genre: Delete" - "delete:genre" - ] - ) - UpdateActorInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _UpdateActorInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Genre: Update" - "update:genre" - ] - ) - MergeActorInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _MergeActorInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Genre: Merge" - "merge:genre" - ] - ) - AddActorReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _AddActorReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Person: Create" - "create:person" - ] - ) - RemoveActorReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - ): _RemoveActorReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Person: Delete" - "delete:person" - ] - ) - UpdateActorReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _UpdateActorReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Person: Update" - "update:person" - ] - ) - MergeActorReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _MergeActorReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Person: Merge" - "merge:person" - ] - ) - CreateActor( - userId: ID - name: String - extensionScalar: String - datetimes: [_Neo4jDateTimeInput] - strings: [String] - ): Actor @hasScope(scopes: ["Actor: Create", "create:actor"]) - UpdateActor( - userId: ID! - name: String - extensionScalar: String - datetimes: [_Neo4jDateTimeInput] - strings: [String] - ): Actor @hasScope(scopes: ["Actor: Update", "update:actor"]) - DeleteActor(userId: ID!): Actor - @hasScope(scopes: ["Actor: Delete", "delete:actor"]) - MergeActor( - userId: ID! - name: String - extensionScalar: String - datetimes: [_Neo4jDateTimeInput] - strings: [String] - ): Actor @hasScope(scopes: ["Actor: Merge", "merge:actor"]) - AddUserInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _AddUserInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Genre: Create" - "create:genre" - ] - ) - RemoveUserInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - ): _RemoveUserInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Genre: Delete" - "delete:genre" - ] - ) - UpdateUserInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _UpdateUserInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Genre: Update" - "update:genre" - ] - ) - MergeUserInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _MergeUserInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Genre: Merge" - "merge:genre" - ] - ) - AddUserReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _AddUserReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Person: Create" - "create:person" - ] - ) - RemoveUserReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - ): _RemoveUserReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Person: Delete" - "delete:person" - ] - ) - UpdateUserReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _UpdateUserReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Person: Update" - "update:person" - ] - ) - MergeUserReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _MergeUserReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Person: Merge" - "merge:person" - ] - ) - AddUserRated( - from: _UserInput! - to: _MovieInput! - data: _RatedInput! - ): _AddUserRatedPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Create" - "create:user" - "Movie: Create" - "create:movie" - ] - ) - RemoveUserRated( - from: _UserInput! - to: _MovieInput! - ): _RemoveUserRatedPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Delete" - "delete:user" - "Movie: Delete" - "delete:movie" - ] - ) - UpdateUserRated( - from: _UserInput! - to: _MovieInput! - data: _RatedInput! - ): _UpdateUserRatedPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Update" - "update:user" - "Movie: Update" - "update:movie" - ] - ) - MergeUserRated( - from: _UserInput! - to: _MovieInput! - data: _RatedInput! - ): _MergeUserRatedPayload - @MutationMeta(relationship: "RATED", from: "User", to: "Movie") - @hasScope( - scopes: ["User: Merge", "merge:user", "Movie: Merge", "merge:movie"] - ) - AddUserFriends( - from: _UserInput! - to: _UserInput! - data: _FriendOfInput! - ): _AddUserFriendsPayload - @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") - @hasScope( - scopes: ["User: Create", "create:user", "User: Create", "create:user"] - ) - RemoveUserFriends( - from: _UserInput! - to: _UserInput! - ): _RemoveUserFriendsPayload - @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") - @hasScope( - scopes: ["User: Delete", "delete:user", "User: Delete", "delete:user"] - ) - UpdateUserFriends( - from: _UserInput! - to: _UserInput! - data: _FriendOfInput! - ): _UpdateUserFriendsPayload - @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") - @hasScope( - scopes: ["User: Update", "update:user", "User: Update", "update:user"] - ) - MergeUserFriends( - from: _UserInput! - to: _UserInput! - data: _FriendOfInput! - ): _MergeUserFriendsPayload - @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") - @hasScope( - scopes: ["User: Merge", "merge:user", "User: Merge", "merge:user"] - ) - AddUserFavorites( - from: _UserInput! - to: _MovieInput! - ): _AddUserFavoritesPayload - @MutationMeta(relationship: "FAVORITED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Create" - "create:user" - "Movie: Create" - "create:movie" - ] - ) - RemoveUserFavorites( - from: _UserInput! - to: _MovieInput! - ): _RemoveUserFavoritesPayload - @MutationMeta(relationship: "FAVORITED", from: "User", to: "Movie") - @hasScope( - scopes: [ - "User: Delete" - "delete:user" - "Movie: Delete" - "delete:movie" - ] - ) - MergeUserFavorites( - from: _UserInput! - to: _MovieInput! - ): _MergeUserFavoritesPayload - @MutationMeta(relationship: "FAVORITED", from: "User", to: "Movie") - @hasScope( - scopes: ["User: Merge", "merge:user", "Movie: Merge", "merge:movie"] - ) - CreateUser(userId: ID, name: String, extensionScalar: String): User - @hasScope(scopes: ["User: Create", "create:user"]) - UpdateUser(userId: ID!, name: String, extensionScalar: String): User - @hasScope(scopes: ["User: Update", "update:user"]) - DeleteUser(userId: ID!): User - @hasScope(scopes: ["User: Delete", "delete:user"]) - MergeUser(userId: ID!, name: String, extensionScalar: String): User - @hasScope(scopes: ["User: Merge", "merge:user"]) - CreateBook(genre: BookGenre): Book - @hasScope(scopes: ["Book: Create", "create:book"]) - DeleteBook(genre: BookGenre!): Book - @hasScope(scopes: ["Book: Delete", "delete:book"]) - MergeBook(genre: BookGenre!): Book - @hasScope(scopes: ["Book: Merge", "merge:book"]) - CreateNodeTypeMutationTest( - NodeTypeMutationTest: BookGenre - ): NodeTypeMutationTest - @hasScope( - scopes: [ - "NodeTypeMutationTest: Create" - "create:nodetypemutationtest" - ] - ) - DeleteNodeTypeMutationTest( - NodeTypeMutationTest: BookGenre! - ): NodeTypeMutationTest - @hasScope( - scopes: [ - "NodeTypeMutationTest: Delete" - "delete:nodetypemutationtest" - ] - ) - MergeNodeTypeMutationTest( - NodeTypeMutationTest: BookGenre! - ): NodeTypeMutationTest - @hasScope( - scopes: ["NodeTypeMutationTest: Merge", "merge:nodetypemutationtest"] - ) - CreatecurrentUserId(userId: String): currentUserId - @hasScope(scopes: ["currentUserId: Create", "create:currentuserid"]) - DeletecurrentUserId(userId: String!): currentUserId - @hasScope(scopes: ["currentUserId: Delete", "delete:currentuserid"]) - MergecurrentUserId(userId: String!): currentUserId - @hasScope(scopes: ["currentUserId: Merge", "merge:currentuserid"]) - AddTemporalNodeTemporalNodes( - from: _TemporalNodeInput! - to: _TemporalNodeInput! - ): _AddTemporalNodeTemporalNodesPayload - @MutationMeta( - relationship: "TEMPORAL" - from: "TemporalNode" - to: "TemporalNode" - ) - @hasScope( - scopes: [ - "TemporalNode: Create" - "create:temporalnode" - "TemporalNode: Create" - "create:temporalnode" - ] - ) - RemoveTemporalNodeTemporalNodes( - from: _TemporalNodeInput! - to: _TemporalNodeInput! - ): _RemoveTemporalNodeTemporalNodesPayload - @MutationMeta( - relationship: "TEMPORAL" - from: "TemporalNode" - to: "TemporalNode" - ) - @hasScope( - scopes: [ - "TemporalNode: Delete" - "delete:temporalnode" - "TemporalNode: Delete" - "delete:temporalnode" - ] - ) - MergeTemporalNodeTemporalNodes( - from: _TemporalNodeInput! - to: _TemporalNodeInput! - ): _MergeTemporalNodeTemporalNodesPayload - @MutationMeta( - relationship: "TEMPORAL" - from: "TemporalNode" - to: "TemporalNode" - ) - @hasScope( - scopes: [ - "TemporalNode: Merge" - "merge:temporalnode" - "TemporalNode: Merge" - "merge:temporalnode" - ] - ) - CreateTemporalNode( - datetime: _Neo4jDateTimeInput - name: String - time: _Neo4jTimeInput - date: _Neo4jDateInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetimes: [_Neo4jLocalDateTimeInput] - ): TemporalNode - @hasScope(scopes: ["TemporalNode: Create", "create:temporalnode"]) - UpdateTemporalNode( - datetime: _Neo4jDateTimeInput - name: String! - time: _Neo4jTimeInput - date: _Neo4jDateInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetimes: [_Neo4jLocalDateTimeInput] - ): TemporalNode - @hasScope(scopes: ["TemporalNode: Update", "update:temporalnode"]) - DeleteTemporalNode(name: String!): TemporalNode - @hasScope(scopes: ["TemporalNode: Delete", "delete:temporalnode"]) - MergeTemporalNode( - datetime: _Neo4jDateTimeInput - name: String! - time: _Neo4jTimeInput - date: _Neo4jDateInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - localdatetimes: [_Neo4jLocalDateTimeInput] - ): TemporalNode - @hasScope(scopes: ["TemporalNode: Merge", "merge:temporalnode"]) - AddSpatialNodeSpatialNodes( - from: _SpatialNodeInput! - to: _SpatialNodeInput! - ): _AddSpatialNodeSpatialNodesPayload - @MutationMeta( - relationship: "SPATIAL" - from: "SpatialNode" - to: "SpatialNode" - ) - @hasScope( - scopes: [ - "SpatialNode: Create" - "create:spatialnode" - "SpatialNode: Create" - "create:spatialnode" - ] - ) - RemoveSpatialNodeSpatialNodes( - from: _SpatialNodeInput! - to: _SpatialNodeInput! - ): _RemoveSpatialNodeSpatialNodesPayload - @MutationMeta( - relationship: "SPATIAL" - from: "SpatialNode" - to: "SpatialNode" - ) - @hasScope( - scopes: [ - "SpatialNode: Delete" - "delete:spatialnode" - "SpatialNode: Delete" - "delete:spatialnode" - ] - ) - MergeSpatialNodeSpatialNodes( - from: _SpatialNodeInput! - to: _SpatialNodeInput! - ): _MergeSpatialNodeSpatialNodesPayload - @MutationMeta( - relationship: "SPATIAL" - from: "SpatialNode" - to: "SpatialNode" - ) - @hasScope( - scopes: [ - "SpatialNode: Merge" - "merge:spatialnode" - "SpatialNode: Merge" - "merge:spatialnode" - ] - ) - CreateSpatialNode(id: ID, point: _Neo4jPointInput): SpatialNode - @hasScope(scopes: ["SpatialNode: Create", "create:spatialnode"]) - UpdateSpatialNode(id: ID!, point: _Neo4jPointInput): SpatialNode - @hasScope(scopes: ["SpatialNode: Update", "update:spatialnode"]) - DeleteSpatialNode(id: ID!): SpatialNode - @hasScope(scopes: ["SpatialNode: Delete", "delete:spatialnode"]) - MergeSpatialNode(id: ID!, point: _Neo4jPointInput): SpatialNode - @hasScope(scopes: ["SpatialNode: Merge", "merge:spatialnode"]) - AddCasedTypeState( - from: _CasedTypeInput! - to: _StateInput! - ): _AddCasedTypeStatePayload - @MutationMeta(relationship: "FILMED_IN", from: "CasedType", to: "State") - @hasScope( - scopes: [ - "CasedType: Create" - "create:casedtype" - "State: Create" - "create:state" - ] - ) - RemoveCasedTypeState( - from: _CasedTypeInput! - to: _StateInput! - ): _RemoveCasedTypeStatePayload - @MutationMeta(relationship: "FILMED_IN", from: "CasedType", to: "State") - @hasScope( - scopes: [ - "CasedType: Delete" - "delete:casedtype" - "State: Delete" - "delete:state" - ] - ) - MergeCasedTypeState( - from: _CasedTypeInput! - to: _StateInput! - ): _MergeCasedTypeStatePayload - @MutationMeta(relationship: "FILMED_IN", from: "CasedType", to: "State") - @hasScope( - scopes: [ - "CasedType: Merge" - "merge:casedtype" - "State: Merge" - "merge:state" - ] - ) - CreateCasedType(name: String): CasedType - @hasScope(scopes: ["CasedType: Create", "create:casedtype"]) - DeleteCasedType(name: String!): CasedType - @hasScope(scopes: ["CasedType: Delete", "delete:casedtype"]) - MergeCasedType(name: String!): CasedType - @hasScope(scopes: ["CasedType: Merge", "merge:casedtype"]) - AddCameraOperators( - from: _PersonInput! - to: _CameraInput! - ): _AddCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "Camera") - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Camera: Create" - "create:camera" - ] - ) - RemoveCameraOperators( - from: _PersonInput! - to: _CameraInput! - ): _RemoveCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "Camera") - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Camera: Delete" - "delete:camera" - ] - ) - MergeCameraOperators( - from: _PersonInput! - to: _CameraInput! - ): _MergeCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "Camera") - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Camera: Merge" - "merge:camera" - ] - ) - AddCameraReflexiveInterfaceRelationship( - from: _CameraInput! - to: _CameraInput! - ): _AddCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "Camera" - to: "Camera" - ) - @hasScope( - scopes: [ - "Camera: Create" - "create:camera" - "Camera: Create" - "create:camera" - ] - ) - RemoveCameraReflexiveInterfaceRelationship( - from: _CameraInput! - to: _CameraInput! - ): _RemoveCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "Camera" - to: "Camera" - ) - @hasScope( - scopes: [ - "Camera: Delete" - "delete:camera" - "Camera: Delete" - "delete:camera" - ] - ) - MergeCameraReflexiveInterfaceRelationship( - from: _CameraInput! - to: _CameraInput! - ): _MergeCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "Camera" - to: "Camera" - ) - @hasScope( - scopes: [ - "Camera: Merge" - "merge:camera" - "Camera: Merge" - "merge:camera" - ] - ) - AddOldCameraOperators( - from: _PersonInput! - to: _OldCameraInput! - ): _AddOldCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "OldCamera") - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "OldCamera: Create" - "create:oldcamera" - ] - ) - RemoveOldCameraOperators( - from: _PersonInput! - to: _OldCameraInput! - ): _RemoveOldCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "OldCamera") - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "OldCamera: Delete" - "delete:oldcamera" - ] - ) - MergeOldCameraOperators( - from: _PersonInput! - to: _OldCameraInput! - ): _MergeOldCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "OldCamera") - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "OldCamera: Merge" - "merge:oldcamera" - ] - ) - AddOldCameraReflexiveInterfaceRelationship( - from: _OldCameraInput! - to: _CameraInput! - ): _AddOldCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "OldCamera" - to: "Camera" - ) - @hasScope( - scopes: [ - "OldCamera: Create" - "create:oldcamera" - "Camera: Create" - "create:camera" - ] - ) - RemoveOldCameraReflexiveInterfaceRelationship( - from: _OldCameraInput! - to: _CameraInput! - ): _RemoveOldCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "OldCamera" - to: "Camera" - ) - @hasScope( - scopes: [ - "OldCamera: Delete" - "delete:oldcamera" - "Camera: Delete" - "delete:camera" - ] - ) - MergeOldCameraReflexiveInterfaceRelationship( - from: _OldCameraInput! - to: _CameraInput! - ): _MergeOldCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "OldCamera" - to: "Camera" - ) - @hasScope( - scopes: [ - "OldCamera: Merge" - "merge:oldcamera" - "Camera: Merge" - "merge:camera" - ] - ) - CreateOldCamera( - type: String - id: ID - make: String - weight: Int - smell: String - ): OldCamera @hasScope(scopes: ["OldCamera: Create", "create:oldcamera"]) - UpdateOldCamera( - type: String - id: ID! - make: String - weight: Int - smell: String - ): OldCamera @hasScope(scopes: ["OldCamera: Update", "update:oldcamera"]) - DeleteOldCamera(id: ID!): OldCamera - @hasScope(scopes: ["OldCamera: Delete", "delete:oldcamera"]) - MergeOldCamera( - type: String - id: ID! - make: String - weight: Int - smell: String - ): OldCamera @hasScope(scopes: ["OldCamera: Merge", "merge:oldcamera"]) - AddNewCameraOperators( - from: _PersonInput! - to: _NewCameraInput! - ): _AddNewCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "NewCamera") - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "NewCamera: Create" - "create:newcamera" - ] - ) - RemoveNewCameraOperators( - from: _PersonInput! - to: _NewCameraInput! - ): _RemoveNewCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "NewCamera") - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "NewCamera: Delete" - "delete:newcamera" - ] - ) - MergeNewCameraOperators( - from: _PersonInput! - to: _NewCameraInput! - ): _MergeNewCameraOperatorsPayload - @MutationMeta(relationship: "cameras", from: "Person", to: "NewCamera") - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "NewCamera: Merge" - "merge:newcamera" - ] - ) - AddNewCameraReflexiveInterfaceRelationship( - from: _NewCameraInput! - to: _CameraInput! - ): _AddNewCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "NewCamera" - to: "Camera" - ) - @hasScope( - scopes: [ - "NewCamera: Create" - "create:newcamera" - "Camera: Create" - "create:camera" - ] - ) - RemoveNewCameraReflexiveInterfaceRelationship( - from: _NewCameraInput! - to: _CameraInput! - ): _RemoveNewCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "NewCamera" - to: "Camera" - ) - @hasScope( - scopes: [ - "NewCamera: Delete" - "delete:newcamera" - "Camera: Delete" - "delete:camera" - ] - ) - MergeNewCameraReflexiveInterfaceRelationship( - from: _NewCameraInput! - to: _CameraInput! - ): _MergeNewCameraReflexiveInterfaceRelationshipPayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "NewCamera" - to: "Camera" - ) - @hasScope( - scopes: [ - "NewCamera: Merge" - "merge:newcamera" - "Camera: Merge" - "merge:camera" - ] - ) - CreateNewCamera( - type: String - id: ID - make: String - weight: Int - features: [String] - ): NewCamera @hasScope(scopes: ["NewCamera: Create", "create:newcamera"]) - UpdateNewCamera( - type: String - id: ID! - make: String - weight: Int - features: [String] - ): NewCamera @hasScope(scopes: ["NewCamera: Update", "update:newcamera"]) - DeleteNewCamera(id: ID!): NewCamera - @hasScope(scopes: ["NewCamera: Delete", "delete:newcamera"]) - MergeNewCamera( - type: String - id: ID! - make: String - weight: Int - features: [String] - ): NewCamera @hasScope(scopes: ["NewCamera: Merge", "merge:newcamera"]) - AddCameraManFavoriteCamera( - from: _CameraManInput! - to: _CameraInput! - ): _AddCameraManFavoriteCameraPayload - @MutationMeta( - relationship: "favoriteCamera" - from: "CameraMan" - to: "Camera" - ) - @hasScope( - scopes: [ - "CameraMan: Create" - "create:cameraman" - "Camera: Create" - "create:camera" - ] - ) - RemoveCameraManFavoriteCamera( - from: _CameraManInput! - to: _CameraInput! - ): _RemoveCameraManFavoriteCameraPayload - @MutationMeta( - relationship: "favoriteCamera" - from: "CameraMan" - to: "Camera" - ) - @hasScope( - scopes: [ - "CameraMan: Delete" - "delete:cameraman" - "Camera: Delete" - "delete:camera" - ] - ) - MergeCameraManFavoriteCamera( - from: _CameraManInput! - to: _CameraInput! - ): _MergeCameraManFavoriteCameraPayload - @MutationMeta( - relationship: "favoriteCamera" - from: "CameraMan" - to: "Camera" - ) - @hasScope( - scopes: [ - "CameraMan: Merge" - "merge:cameraman" - "Camera: Merge" - "merge:camera" - ] - ) - AddCameraManCameras( - from: _CameraManInput! - to: _CameraInput! - ): _AddCameraManCamerasPayload - @MutationMeta(relationship: "cameras", from: "CameraMan", to: "Camera") - @hasScope( - scopes: [ - "CameraMan: Create" - "create:cameraman" - "Camera: Create" - "create:camera" - ] - ) - RemoveCameraManCameras( - from: _CameraManInput! - to: _CameraInput! - ): _RemoveCameraManCamerasPayload - @MutationMeta(relationship: "cameras", from: "CameraMan", to: "Camera") - @hasScope( - scopes: [ - "CameraMan: Delete" - "delete:cameraman" - "Camera: Delete" - "delete:camera" - ] - ) - MergeCameraManCameras( - from: _CameraManInput! - to: _CameraInput! - ): _MergeCameraManCamerasPayload - @MutationMeta(relationship: "cameras", from: "CameraMan", to: "Camera") - @hasScope( - scopes: [ - "CameraMan: Merge" - "merge:cameraman" - "Camera: Merge" - "merge:camera" - ] - ) - AddCameraManCameraBuddy( - from: _CameraManInput! - to: _PersonInput! - ): _AddCameraManCameraBuddyPayload - @MutationMeta( - relationship: "cameraBuddy" - from: "CameraMan" - to: "Person" - ) - @hasScope( - scopes: [ - "CameraMan: Create" - "create:cameraman" - "Person: Create" - "create:person" - ] - ) - RemoveCameraManCameraBuddy( - from: _CameraManInput! - to: _PersonInput! - ): _RemoveCameraManCameraBuddyPayload - @MutationMeta( - relationship: "cameraBuddy" - from: "CameraMan" - to: "Person" - ) - @hasScope( - scopes: [ - "CameraMan: Delete" - "delete:cameraman" - "Person: Delete" - "delete:person" - ] - ) - MergeCameraManCameraBuddy( - from: _CameraManInput! - to: _PersonInput! - ): _MergeCameraManCameraBuddyPayload - @MutationMeta( - relationship: "cameraBuddy" - from: "CameraMan" - to: "Person" - ) - @hasScope( - scopes: [ - "CameraMan: Merge" - "merge:cameraman" - "Person: Merge" - "merge:person" - ] - ) - AddCameraManInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _AddCameraManInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Genre: Create" - "create:genre" - ] - ) - RemoveCameraManInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - ): _RemoveCameraManInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Genre: Delete" - "delete:genre" - ] - ) - UpdateCameraManInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _UpdateCameraManInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Genre: Update" - "update:genre" - ] - ) - MergeCameraManInterfacedRelationshipType( - from: _PersonInput! - to: _GenreInput! - data: _InterfacedRelationshipTypeInput! - ): _MergeCameraManInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Genre: Merge" - "merge:genre" - ] - ) - AddCameraManReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _AddCameraManReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Create" - "create:person" - "Person: Create" - "create:person" - ] - ) - RemoveCameraManReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - ): _RemoveCameraManReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Delete" - "delete:person" - "Person: Delete" - "delete:person" - ] - ) - UpdateCameraManReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _UpdateCameraManReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Update" - "update:person" - "Person: Update" - "update:person" - ] - ) - MergeCameraManReflexiveInterfacedRelationshipType( - from: _PersonInput! - to: _PersonInput! - data: _ReflexiveInterfacedRelationshipTypeInput! - ): _MergeCameraManReflexiveInterfacedRelationshipTypePayload - @MutationMeta( - relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) - @hasScope( - scopes: [ - "Person: Merge" - "merge:person" - "Person: Merge" - "merge:person" - ] - ) - CreateCameraMan( - userId: ID - name: String - extensionScalar: String - ): CameraMan @hasScope(scopes: ["CameraMan: Create", "create:cameraman"]) - UpdateCameraMan( - userId: ID! - name: String - extensionScalar: String - ): CameraMan @hasScope(scopes: ["CameraMan: Update", "update:cameraman"]) - DeleteCameraMan(userId: ID!): CameraMan - @hasScope(scopes: ["CameraMan: Delete", "delete:cameraman"]) - MergeCameraMan( - userId: ID! - name: String - extensionScalar: String - ): CameraMan @hasScope(scopes: ["CameraMan: Merge", "merge:cameraman"]) - AddUniqueNodeTestRelation( - from: _UniqueNodeInput! - to: _UniqueStringNodeInput! - ): _AddUniqueNodeTestRelationPayload - @MutationMeta( - relationship: "TEST_RELATION" - from: "UniqueNode" - to: "UniqueStringNode" - ) - @hasScope( - scopes: [ - "UniqueNode: Create" - "create:uniquenode" - "UniqueStringNode: Create" - "create:uniquestringnode" - ] - ) - RemoveUniqueNodeTestRelation( - from: _UniqueNodeInput! - to: _UniqueStringNodeInput! - ): _RemoveUniqueNodeTestRelationPayload - @MutationMeta( - relationship: "TEST_RELATION" - from: "UniqueNode" - to: "UniqueStringNode" - ) - @hasScope( - scopes: [ - "UniqueNode: Delete" - "delete:uniquenode" - "UniqueStringNode: Delete" - "delete:uniquestringnode" - ] - ) - MergeUniqueNodeTestRelation( - from: _UniqueNodeInput! - to: _UniqueStringNodeInput! - ): _MergeUniqueNodeTestRelationPayload - @MutationMeta( - relationship: "TEST_RELATION" - from: "UniqueNode" - to: "UniqueStringNode" - ) - @hasScope( - scopes: [ - "UniqueNode: Merge" - "merge:uniquenode" - "UniqueStringNode: Merge" - "merge:uniquestringnode" - ] - ) - CreateUniqueNode(string: String, id: ID, anotherId: ID): UniqueNode - @hasScope(scopes: ["UniqueNode: Create", "create:uniquenode"]) - UpdateUniqueNode(string: String, id: ID!, anotherId: ID): UniqueNode - @hasScope(scopes: ["UniqueNode: Update", "update:uniquenode"]) - DeleteUniqueNode(id: ID!): UniqueNode - @hasScope(scopes: ["UniqueNode: Delete", "delete:uniquenode"]) - MergeUniqueNode(string: String, id: ID!, anotherId: ID): UniqueNode - @hasScope(scopes: ["UniqueNode: Merge", "merge:uniquenode"]) - AddUniqueStringNodeTestRelation( - from: _UniqueNodeInput! - to: _UniqueStringNodeInput! - ): _AddUniqueStringNodeTestRelationPayload - @MutationMeta( - relationship: "TEST_RELATION" - from: "UniqueNode" - to: "UniqueStringNode" - ) - @hasScope( - scopes: [ - "UniqueNode: Create" - "create:uniquenode" - "UniqueStringNode: Create" - "create:uniquestringnode" - ] - ) - RemoveUniqueStringNodeTestRelation( - from: _UniqueNodeInput! - to: _UniqueStringNodeInput! - ): _RemoveUniqueStringNodeTestRelationPayload - @MutationMeta( - relationship: "TEST_RELATION" - from: "UniqueNode" - to: "UniqueStringNode" - ) - @hasScope( - scopes: [ - "UniqueNode: Delete" - "delete:uniquenode" - "UniqueStringNode: Delete" - "delete:uniquestringnode" - ] - ) - MergeUniqueStringNodeTestRelation( - from: _UniqueNodeInput! - to: _UniqueStringNodeInput! - ): _MergeUniqueStringNodeTestRelationPayload - @MutationMeta( - relationship: "TEST_RELATION" - from: "UniqueNode" - to: "UniqueStringNode" - ) - @hasScope( - scopes: [ - "UniqueNode: Merge" - "merge:uniquenode" - "UniqueStringNode: Merge" - "merge:uniquestringnode" - ] - ) - CreateUniqueStringNode(id: ID!, uniqueString: String): UniqueStringNode - @hasScope( - scopes: ["UniqueStringNode: Create", "create:uniquestringnode"] - ) - UpdateUniqueStringNode(id: ID, uniqueString: String!): UniqueStringNode - @hasScope( - scopes: ["UniqueStringNode: Update", "update:uniquestringnode"] - ) - DeleteUniqueStringNode(uniqueString: String!): UniqueStringNode - @hasScope( - scopes: ["UniqueStringNode: Delete", "delete:uniquestringnode"] - ) - MergeUniqueStringNode(id: ID, uniqueString: String!): UniqueStringNode - @hasScope(scopes: ["UniqueStringNode: Merge", "merge:uniquestringnode"]) - } - - extend type Mutation { - CustomCamera: Camera - @cypher( - statement: "CREATE (newCamera:Camera:NewCamera {id: apoc.create.uuid(), type: 'macro'}) RETURN newCamera" - ) - CustomCameras: [Camera] - @cypher( - statement: "CREATE (newCamera:Camera:NewCamera {id: apoc.create.uuid(), type: 'macro', features: ['selfie', 'zoom']}) CREATE (oldCamera:Camera:OldCamera {id: apoc.create.uuid(), type: 'floating', smell: 'rusty' }) RETURN [newCamera, oldCamera]" - ) - } - input _MovieInput { - movieId: ID! - } - - input _GenreInput { - name: String! - } - - type _AddMovieExtensionNodePayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - type _RemoveMovieExtensionNodePayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - type _MergeMovieExtensionNodePayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - type _AddMovieGenresPayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - type _RemoveMovieGenresPayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - input _ActorInput { - userId: ID! - } - - type _AddMovieActorsPayload - @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { - from: Actor - to: Movie - } - - type _RemoveMovieActorsPayload - @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { - from: Actor - to: Movie - } - - input _StateInput { - name: String! - } - - type _AddMovieFilmedInPayload - @relation(name: "FILMED_IN", from: "Movie", to: "State") { - from: Movie - to: State - } - - type _RemoveMovieFilmedInPayload - @relation(name: "FILMED_IN", from: "Movie", to: "State") { - from: Movie - to: State - } - - type _MergeMovieFilmedInPayload - @relation(name: "FILMED_IN", from: "Movie", to: "State") { - from: Movie - to: State - } - - input _UserInput { - userId: ID! - } - - input _RatedInput { - rating: Int - ratings: [Int] - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - datetimes: [_Neo4jDateTimeInput] - location: _Neo4jPointInput - } - - type _AddMovieRatingsPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String - } - - type _RemoveMovieRatingsPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie - } - - type _UpdateMovieRatingsPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" ) rating: Int ratings: [Int] @@ -4647,796 +2178,1237 @@ test.cb('Test augmented schema', t => { datetimes: [_Neo4jDateTime] location: _Neo4jPoint _id: String - } - - type _MergeMovieRatingsPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User to: Movie - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String - } - - type _AddGenreMoviesPayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - type _RemoveGenreMoviesPayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre } - type _MergeGenreMoviesPayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre - } - - type _MergeMovieGenresPayload - @relation(name: "IN_GENRE", from: "Movie", to: "Genre") { - from: Movie - to: Genre + enum BookGenre { + Mystery + Science } - type _AddActorMoviesPayload - @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { - from: Actor - to: Movie + input _BookInput { + genre: BookGenre! } - type _RemoveActorMoviesPayload - @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { - from: Actor - to: Movie + enum _BookOrdering { + genre_asc + genre_desc + _id_asc + _id_desc } - type _MergeActorMoviesPayload - @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { - from: Actor - to: Movie + input _BookFilter { + AND: [_BookFilter!] + OR: [_BookFilter!] + genre: BookGenre + genre_not: BookGenre + genre_in: [BookGenre!] + genre_not_in: [BookGenre!] } - type _MergeMovieActorsPayload - @relation(name: "ACTED_IN", from: "Actor", to: "Movie") { - from: Actor - to: Movie + type Book { + genre: BookGenre + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String } - type _AddActorKnowsPayload - @relation(name: "KNOWS", from: "Actor", to: "Person") { - from: Actor - to: Person + input _NodeTypeMutationTestInput { + NodeTypeMutationTest: BookGenre! } - type _MergeActorKnowsPayload - @relation(name: "KNOWS", from: "Actor", to: "Person") { - from: Actor - to: Person + type NodeTypeMutationTest { + NodeTypeMutationTest: BookGenre } - type _AddActorInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre - string: String! - boolean: Boolean - _id: String + """ + Custom ordering enum type + block description + """ + enum _GenreOrdering { + name_desc + name_asc } - type _RemoveActorInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre + input _currentUserIdInput { + userId: String! } - type _UpdateActorInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre - string: String! - boolean: Boolean - _id: String + enum _currentUserIdOrdering { + userId_asc + userId_desc + _id_asc + _id_desc } - type _MergeActorInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { - from: Person - to: Genre - string: String! - boolean: Boolean - _id: String + input _currentUserIdFilter { + AND: [_currentUserIdFilter!] + OR: [_currentUserIdFilter!] + userId: String + userId_not: String + userId_in: [String!] + userId_not_in: [String!] + userId_contains: String + userId_not_contains: String + userId_starts_with: String + userId_not_starts_with: String + userId_ends_with: String + userId_not_ends_with: String } - type _AddActorReflexiveInterfacedRelationshipTypePayload - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { - from: Person - to: Person - boolean: Boolean + type currentUserId { + userId: String + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." _id: String } - type _RemoveActorReflexiveInterfacedRelationshipTypePayload - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { - from: Person - to: Person + type _AddTemporalNodeTemporalNodesPayload + @relation(name: "TEMPORAL", from: "TemporalNode", to: "TemporalNode") { + "Field for the TemporalNode node this TEMPORAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: TemporalNode + "Field for the TemporalNode node this TEMPORAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: TemporalNode } - type _UpdateActorReflexiveInterfacedRelationshipTypePayload - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { - from: Person - to: Person - boolean: Boolean - _id: String + type _RemoveTemporalNodeTemporalNodesPayload + @relation(name: "TEMPORAL", from: "TemporalNode", to: "TemporalNode") { + "Field for the TemporalNode node this TEMPORAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: TemporalNode + "Field for the TemporalNode node this TEMPORAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: TemporalNode } - type _MergeActorReflexiveInterfacedRelationshipTypePayload - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { - from: Person - to: Person - boolean: Boolean - _id: String + type _MergeTemporalNodeTemporalNodesPayload + @relation(name: "TEMPORAL", from: "TemporalNode", to: "TemporalNode") { + "Field for the TemporalNode node this TEMPORAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: TemporalNode + "Field for the TemporalNode node this TEMPORAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: TemporalNode } - type _RemoveActorKnowsPayload - @relation(name: "KNOWS", from: "Actor", to: "Person") { - from: Actor - to: Person + input _TemporalNodeInput { + name: String! } - enum _RatedOrdering { - currentUserId_asc - currentUserId_desc - rating_asc - rating_desc + enum _TemporalNodeOrdering { + datetime_asc + datetime_desc + name_asc + name_desc time_asc time_desc date_asc date_desc - datetime_asc - datetime_desc localtime_asc localtime_desc localdatetime_asc localdatetime_desc + computedTimestamp_asc + computedTimestamp_desc _id_asc _id_desc } - type _AddUserRatedPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String - } - - type _RemoveUserRatedPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie + input _TemporalNodeFilter { + AND: [_TemporalNodeFilter!] + OR: [_TemporalNodeFilter!] + datetime: _Neo4jDateTimeInput + datetime_not: _Neo4jDateTimeInput + datetime_in: [_Neo4jDateTimeInput!] + datetime_not_in: [_Neo4jDateTimeInput!] + datetime_lt: _Neo4jDateTimeInput + datetime_lte: _Neo4jDateTimeInput + datetime_gt: _Neo4jDateTimeInput + datetime_gte: _Neo4jDateTimeInput + name: String + name_not: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_not_contains: String + name_starts_with: String + name_not_starts_with: String + name_ends_with: String + name_not_ends_with: String + time: _Neo4jTimeInput + time_not: _Neo4jTimeInput + time_in: [_Neo4jTimeInput!] + time_not_in: [_Neo4jTimeInput!] + time_lt: _Neo4jTimeInput + time_lte: _Neo4jTimeInput + time_gt: _Neo4jTimeInput + time_gte: _Neo4jTimeInput + date: _Neo4jDateInput + date_not: _Neo4jDateInput + date_in: [_Neo4jDateInput!] + date_not_in: [_Neo4jDateInput!] + date_lt: _Neo4jDateInput + date_lte: _Neo4jDateInput + date_gt: _Neo4jDateInput + date_gte: _Neo4jDateInput + localtime: _Neo4jLocalTimeInput + localtime_not: _Neo4jLocalTimeInput + localtime_in: [_Neo4jLocalTimeInput!] + localtime_not_in: [_Neo4jLocalTimeInput!] + localtime_lt: _Neo4jLocalTimeInput + localtime_lte: _Neo4jLocalTimeInput + localtime_gt: _Neo4jLocalTimeInput + localtime_gte: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetime_not: _Neo4jLocalDateTimeInput + localdatetime_in: [_Neo4jLocalDateTimeInput!] + localdatetime_not_in: [_Neo4jLocalDateTimeInput!] + localdatetime_lt: _Neo4jLocalDateTimeInput + localdatetime_lte: _Neo4jLocalDateTimeInput + localdatetime_gt: _Neo4jLocalDateTimeInput + localdatetime_gte: _Neo4jLocalDateTimeInput + localdatetimes: [_Neo4jLocalDateTimeInput!] + localdatetimes_not: [_Neo4jLocalDateTimeInput!] + localdatetimes_lt: [_Neo4jLocalDateTimeInput!] + localdatetimes_lte: [_Neo4jLocalDateTimeInput!] + localdatetimes_gt: [_Neo4jLocalDateTimeInput!] + localdatetimes_gte: [_Neo4jLocalDateTimeInput!] + temporalNodes: _TemporalNodeFilter + temporalNodes_not: _TemporalNodeFilter + temporalNodes_in: [_TemporalNodeFilter!] + temporalNodes_not_in: [_TemporalNodeFilter!] + temporalNodes_some: _TemporalNodeFilter + temporalNodes_none: _TemporalNodeFilter + temporalNodes_single: _TemporalNodeFilter + temporalNodes_every: _TemporalNodeFilter } - type _UpdateUserRatedPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] + type TemporalNode { + datetime: _Neo4jDateTime + name: String time: _Neo4jTime date: _Neo4jDate - datetime: _Neo4jDateTime localtime: _Neo4jLocalTime localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint + localdatetimes: [_Neo4jLocalDateTime] + computedTimestamp: String + @cypher(statement: "RETURN toString(datetime())") + temporalNodes( + time: _Neo4jTimeInput + date: _Neo4jDateInput + datetime: _Neo4jDateTimeInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + first: Int + offset: Int + orderBy: [_TemporalNodeOrdering] + filter: _TemporalNodeFilter + ): [TemporalNode] @relation(name: "TEMPORAL", direction: OUT) + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." _id: String } - type _MergeUserRatedPayload - @relation(name: "RATED", from: "User", to: "Movie") { - from: User - to: Movie - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String + type _AddSpatialNodeSpatialNodesPayload + @relation(name: "SPATIAL", from: "SpatialNode", to: "SpatialNode") { + "Field for the SpatialNode node this SPATIAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: SpatialNode + "Field for the SpatialNode node this SPATIAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: SpatialNode } - enum _FriendOfOrdering { - currentUserId_asc - currentUserId_desc - since_asc - since_desc - time_asc - time_desc - date_asc - date_desc - datetime_asc - datetime_desc - localtime_asc - localtime_desc - localdatetime_asc - localdatetime_desc + type _RemoveSpatialNodeSpatialNodesPayload + @relation(name: "SPATIAL", from: "SpatialNode", to: "SpatialNode") { + "Field for the SpatialNode node this SPATIAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: SpatialNode + "Field for the SpatialNode node this SPATIAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: SpatialNode + } + + type _MergeSpatialNodeSpatialNodesPayload + @relation(name: "SPATIAL", from: "SpatialNode", to: "SpatialNode") { + "Field for the SpatialNode node this SPATIAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: SpatialNode + "Field for the SpatialNode node this SPATIAL [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: SpatialNode + } + + input _SpatialNodeInput { + id: ID! + } + + enum _SpatialNodeOrdering { + id_asc + id_desc _id_asc _id_desc } - input _FriendOfInput { - since: Int - time: _Neo4jTimeInput - date: _Neo4jDateInput - datetime: _Neo4jDateTimeInput - ratings: [String] - datetimes: [_Neo4jDateTimeInput] - localtime: _Neo4jLocalTimeInput - localdatetime: _Neo4jLocalDateTimeInput - location: _Neo4jPointInput + input _SpatialNodeFilter { + AND: [_SpatialNodeFilter!] + OR: [_SpatialNodeFilter!] + id: ID + id_not: ID + id_in: [ID!] + id_not_in: [ID!] + id_contains: ID + id_not_contains: ID + id_starts_with: ID + id_not_starts_with: ID + id_ends_with: ID + id_not_ends_with: ID + point: _Neo4jPointInput + point_not: _Neo4jPointInput + point_distance: _Neo4jPointDistanceFilter + point_distance_lt: _Neo4jPointDistanceFilter + point_distance_lte: _Neo4jPointDistanceFilter + point_distance_gt: _Neo4jPointDistanceFilter + point_distance_gte: _Neo4jPointDistanceFilter + spatialNodes: _SpatialNodeFilter + spatialNodes_not: _SpatialNodeFilter + spatialNodes_in: [_SpatialNodeFilter!] + spatialNodes_not_in: [_SpatialNodeFilter!] + spatialNodes_some: _SpatialNodeFilter + spatialNodes_none: _SpatialNodeFilter + spatialNodes_single: _SpatialNodeFilter + spatialNodes_every: _SpatialNodeFilter } - type _AddUserFriendsPayload - @relation(name: "FRIEND_OF", from: "User", to: "User") { - from: User - to: User - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - since: Int - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - ratings: [String] - datetimes: [_Neo4jDateTime] - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - location: _Neo4jPoint + type SpatialNode { + id: ID! + point: _Neo4jPoint + spatialNodes( + point: _Neo4jPointInput + first: Int + offset: Int + orderBy: [_SpatialNodeOrdering] + filter: _SpatialNodeFilter + ): [SpatialNode] @relation(name: "SPATIAL", direction: OUT) + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." _id: String } - type _RemoveUserFriendsPayload - @relation(name: "FRIEND_OF", from: "User", to: "User") { - from: User - to: User + type ignoredType { + ignoredField: String @neo4j_ignore } - type _UpdateUserFriendsPayload - @relation(name: "FRIEND_OF", from: "User", to: "User") { - from: User - to: User - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - since: Int - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - ratings: [String] - datetimes: [_Neo4jDateTime] - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - location: _Neo4jPoint - _id: String + "Custom scalar type line description" + scalar Time + + scalar Date + + scalar DateTime + + scalar LocalTime + + scalar LocalDateTime + + "Input object type line description" + input strInput { + "Input field line description" + strArg: String } - type _MergeUserFriendsPayload - @relation(name: "FRIEND_OF", from: "User", to: "User") { - from: User - to: User - currentUserId: String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" - ) - since: Int - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - ratings: [String] - datetimes: [_Neo4jDateTime] - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - location: _Neo4jPoint - _id: String + enum Role { + reader + user + admin } - type _AddUserFavoritesPayload - @relation(name: "FAVORITED", from: "User", to: "Movie") { - from: User - to: Movie + type _AddCasedTypeStatePayload + @relation(name: "FILMED_IN", from: "CasedType", to: "State") { + "Field for the CasedType node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: CasedType + "Field for the State node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: State } - type _RemoveUserFavoritesPayload - @relation(name: "FAVORITED", from: "User", to: "Movie") { - from: User - to: Movie + type _RemoveCasedTypeStatePayload + @relation(name: "FILMED_IN", from: "CasedType", to: "State") { + "Field for the CasedType node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: CasedType + "Field for the State node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: State } - type _MergeUserFavoritesPayload - @relation(name: "FAVORITED", from: "User", to: "Movie") { - from: User - to: Movie + type _MergeCasedTypeStatePayload + @relation(name: "FILMED_IN", from: "CasedType", to: "State") { + "Field for the CasedType node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: CasedType + "Field for the State node this FILMED_IN [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: State + } + + input _CasedTypeInput { + name: String! + } + + enum _CasedTypeOrdering { + name_asc + name_desc + _id_asc + _id_desc + } + + input _CasedTypeFilter { + AND: [_CasedTypeFilter!] + OR: [_CasedTypeFilter!] + name: String + name_not: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_not_contains: String + name_starts_with: String + name_not_starts_with: String + name_ends_with: String + name_not_ends_with: String + state: _StateFilter + state_not: _StateFilter + state_in: [_StateFilter!] + state_not_in: [_StateFilter!] } - input _SpatialNodeInput { - id: ID! + type CasedType { + name: String + state(filter: _StateFilter): State + @relation(name: "FILMED_IN", direction: "OUT") + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String } - type _AddSpatialNodeSpatialNodesPayload - @relation(name: "SPATIAL", from: "SpatialNode", to: "SpatialNode") { - from: SpatialNode - to: SpatialNode + input _InterfaceNoScalarsFilter { + AND: [_InterfaceNoScalarsFilter!] + OR: [_InterfaceNoScalarsFilter!] + movies: _MovieFilter + movies_not: _MovieFilter + movies_in: [_MovieFilter!] + movies_not_in: [_MovieFilter!] + movies_some: _MovieFilter + movies_none: _MovieFilter + movies_single: _MovieFilter + movies_every: _MovieFilter } - type _RemoveSpatialNodeSpatialNodesPayload - @relation(name: "SPATIAL", from: "SpatialNode", to: "SpatialNode") { - from: SpatialNode - to: SpatialNode + interface InterfaceNoScalars { + movies( + first: Int + offset: Int + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] @relation(name: "MOVIES", direction: OUT) } - type _MergeSpatialNodeSpatialNodesPayload - @relation(name: "SPATIAL", from: "SpatialNode", to: "SpatialNode") { - from: SpatialNode - to: SpatialNode + enum _InterfaceNoScalarsOrdering { + movies_asc } - input _CasedTypeInput { - name: String! + input _CameraFilter { + AND: [_CameraFilter!] + OR: [_CameraFilter!] + id: ID + id_not: ID + id_in: [ID!] + id_not_in: [ID!] + id_contains: ID + id_not_contains: ID + id_starts_with: ID + id_not_starts_with: ID + id_ends_with: ID + id_not_ends_with: ID + type: String + type_not: String + type_in: [String!] + type_not_in: [String!] + type_contains: String + type_not_contains: String + type_starts_with: String + type_not_starts_with: String + type_ends_with: String + type_not_ends_with: String + make: String + make_not: String + make_in: [String!] + make_not_in: [String!] + make_contains: String + make_not_contains: String + make_starts_with: String + make_not_starts_with: String + make_ends_with: String + make_not_ends_with: String + weight: Int + weight_not: Int + weight_in: [Int!] + weight_not_in: [Int!] + weight_lt: Int + weight_lte: Int + weight_gt: Int + weight_gte: Int + operators: _PersonFilter + operators_not: _PersonFilter + operators_in: [_PersonFilter!] + operators_not_in: [_PersonFilter!] + operators_some: _PersonFilter + operators_none: _PersonFilter + operators_single: _PersonFilter + operators_every: _PersonFilter } - type _AddCasedTypeStatePayload - @relation(name: "FILMED_IN", from: "CasedType", to: "State") { - from: CasedType - to: State + type _AddCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "Camera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Camera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _RemoveCasedTypeStatePayload - @relation(name: "FILMED_IN", from: "CasedType", to: "State") { - from: CasedType - to: State + type _RemoveCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "Camera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Camera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _MergeCasedTypeStatePayload - @relation(name: "FILMED_IN", from: "CasedType", to: "State") { - from: CasedType - to: State + type _MergeCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "Camera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Person + "Field for the Camera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _AddCameraManInterfacedRelationshipTypePayload + type _AddCameraReflexiveInterfaceRelationshipPayload @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "Camera" + to: "Camera" ) { - from: Person - to: Genre - string: String! - boolean: Boolean - _id: String + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Camera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _RemoveCameraManInterfacedRelationshipTypePayload + type _RemoveCameraReflexiveInterfaceRelationshipPayload @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "Camera" + to: "Camera" ) { - from: Person - to: Genre + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Camera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _UpdateCameraManInterfacedRelationshipTypePayload + type _MergeCameraReflexiveInterfaceRelationshipPayload @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "Camera" + to: "Camera" ) { + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: Camera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera + } + + input _CameraInput { + id: ID! + } + + interface Camera { + type: String + id: ID! @unique + make: String + weight: Int + operators( + first: Int + offset: Int + orderBy: [_PersonOrdering] + filter: _PersonFilter + ): [Person] @relation(name: "cameras", direction: IN) + computedOperators( + name: String + first: Int + offset: Int + orderBy: [_PersonOrdering] + ): [Person] + @cypher(statement: "MATCH (this)<-[:cameras]-(p:Person) RETURN p") + reflexiveInterfaceRelationship( + first: Int + offset: Int + orderBy: [_CameraOrdering] + filter: _CameraFilter + ): [Camera] + @relation(name: "REFLEXIVE_INTERFACE_RELATIONSHIP", direction: OUT) + } + + enum _CameraOrdering { + id_asc + id_desc + type_asc + type_desc + make_asc + make_desc + weight_asc + weight_desc + } + + type _AddOldCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "OldCamera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person - to: Genre - string: String! - boolean: Boolean - _id: String + "Field for the OldCamera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: OldCamera } - type _MergeCameraManInterfacedRelationshipTypePayload - @relation( - name: "INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Genre" - ) { + type _RemoveOldCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "OldCamera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person - to: Genre - string: String! - boolean: Boolean - _id: String + "Field for the OldCamera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: OldCamera } - type _AddCameraManReflexiveInterfacedRelationshipTypePayload - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { + type _MergeOldCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "OldCamera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person - to: Person - boolean: Boolean - _id: String + "Field for the OldCamera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: OldCamera } - type _RemoveCameraManReflexiveInterfacedRelationshipTypePayload + type _AddOldCameraReflexiveInterfaceRelationshipPayload @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "OldCamera" + to: "Camera" ) { - from: Person - to: Person + "Field for the OldCamera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: OldCamera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _UpdateCameraManReflexiveInterfacedRelationshipTypePayload + type _RemoveOldCameraReflexiveInterfaceRelationshipPayload @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "OldCamera" + to: "Camera" ) { - from: Person - to: Person - boolean: Boolean - _id: String + "Field for the OldCamera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: OldCamera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - type _MergeCameraManReflexiveInterfacedRelationshipTypePayload + type _MergeOldCameraReflexiveInterfaceRelationshipPayload @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "OldCamera" + to: "Camera" ) { - from: Person - to: Person - boolean: Boolean - _id: String + "Field for the OldCamera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: OldCamera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Camera } - input _CameraManInput { - userId: ID! + input _OldCameraInput { + id: ID! } - input _CameraInput { - id: ID! + enum _OldCameraOrdering { + type_asc + type_desc + id_asc + id_desc + make_asc + make_desc + weight_asc + weight_desc + smell_asc + smell_desc + _id_asc + _id_desc } - type _AddCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "Camera") { + input _OldCameraFilter { + AND: [_OldCameraFilter!] + OR: [_OldCameraFilter!] + type: String + type_not: String + type_in: [String!] + type_not_in: [String!] + type_contains: String + type_not_contains: String + type_starts_with: String + type_not_starts_with: String + type_ends_with: String + type_not_ends_with: String + id: ID + id_not: ID + id_in: [ID!] + id_not_in: [ID!] + id_contains: ID + id_not_contains: ID + id_starts_with: ID + id_not_starts_with: ID + id_ends_with: ID + id_not_ends_with: ID + make: String + make_not: String + make_in: [String!] + make_not_in: [String!] + make_contains: String + make_not_contains: String + make_starts_with: String + make_not_starts_with: String + make_ends_with: String + make_not_ends_with: String + weight: Int + weight_not: Int + weight_in: [Int!] + weight_not_in: [Int!] + weight_lt: Int + weight_lte: Int + weight_gt: Int + weight_gte: Int + smell: String + smell_not: String + smell_in: [String!] + smell_not_in: [String!] + smell_contains: String + smell_not_contains: String + smell_starts_with: String + smell_not_starts_with: String + smell_ends_with: String + smell_not_ends_with: String + operators: _PersonFilter + operators_not: _PersonFilter + operators_in: [_PersonFilter!] + operators_not_in: [_PersonFilter!] + operators_some: _PersonFilter + operators_none: _PersonFilter + operators_single: _PersonFilter + operators_every: _PersonFilter + reflexiveInterfaceRelationship: _CameraFilter + reflexiveInterfaceRelationship_not: _CameraFilter + reflexiveInterfaceRelationship_in: [_CameraFilter!] + reflexiveInterfaceRelationship_not_in: [_CameraFilter!] + reflexiveInterfaceRelationship_some: _CameraFilter + reflexiveInterfaceRelationship_none: _CameraFilter + reflexiveInterfaceRelationship_single: _CameraFilter + reflexiveInterfaceRelationship_every: _CameraFilter + } + + type OldCamera implements Camera { + type: String + id: ID! @unique + make: String + weight: Int + smell: String + operators( + first: Int + offset: Int + orderBy: [_PersonOrdering] + filter: _PersonFilter + ): [Person] @relation(name: "cameras", direction: IN) + computedOperators( + name: String + first: Int + offset: Int + orderBy: [_PersonOrdering] + ): [Person] + @cypher(statement: "MATCH (this)<-[:cameras]-(p:Person) RETURN p") + reflexiveInterfaceRelationship( + first: Int + offset: Int + orderBy: [_CameraOrdering] + filter: _CameraFilter + ): [Camera] + @relation(name: "REFLEXIVE_INTERFACE_RELATIONSHIP", direction: OUT) + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String + } + + type _AddNewCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "NewCamera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person - to: Camera + "Field for the NewCamera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: NewCamera } - type _RemoveCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "Camera") { + type _RemoveNewCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "NewCamera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person - to: Camera + "Field for the NewCamera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: NewCamera } - type _MergeCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "Camera") { + type _MergeNewCameraOperatorsPayload + @relation(name: "cameras", from: "Person", to: "NewCamera") { + "Field for the Person node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the NewCamera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: NewCamera + } + + type _AddNewCameraReflexiveInterfaceRelationshipPayload + @relation( + name: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "NewCamera" + to: "Camera" + ) { + "Field for the NewCamera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: NewCamera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } - type _AddCameraReflexiveInterfaceRelationshipPayload + type _RemoveNewCameraReflexiveInterfaceRelationshipPayload @relation( name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "Camera" + from: "NewCamera" to: "Camera" ) { - from: Camera + "Field for the NewCamera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: NewCamera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } - type _RemoveCameraReflexiveInterfaceRelationshipPayload + type _MergeNewCameraReflexiveInterfaceRelationshipPayload @relation( name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "Camera" + from: "NewCamera" to: "Camera" ) { - from: Camera + "Field for the NewCamera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: NewCamera + "Field for the Camera node this REFLEXIVE_INTERFACE_RELATIONSHIP [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } - type _MergeCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "Camera" - to: "Camera" - ) { - from: Camera - to: Camera + input _NewCameraInput { + id: ID! + } + + enum _NewCameraOrdering { + type_asc + type_desc + id_asc + id_desc + make_asc + make_desc + weight_asc + weight_desc + _id_asc + _id_desc + } + + input _NewCameraFilter { + AND: [_NewCameraFilter!] + OR: [_NewCameraFilter!] + type: String + type_not: String + type_in: [String!] + type_not_in: [String!] + type_contains: String + type_not_contains: String + type_starts_with: String + type_not_starts_with: String + type_ends_with: String + type_not_ends_with: String + id: ID + id_not: ID + id_in: [ID!] + id_not_in: [ID!] + id_contains: ID + id_not_contains: ID + id_starts_with: ID + id_not_starts_with: ID + id_ends_with: ID + id_not_ends_with: ID + make: String + make_not: String + make_in: [String!] + make_not_in: [String!] + make_contains: String + make_not_contains: String + make_starts_with: String + make_not_starts_with: String + make_ends_with: String + make_not_ends_with: String + weight: Int + weight_not: Int + weight_in: [Int!] + weight_not_in: [Int!] + weight_lt: Int + weight_lte: Int + weight_gt: Int + weight_gte: Int + features: [String!] + features_not: [String!] + features_contains: [String!] + features_not_contains: [String!] + features_starts_with: [String!] + features_not_starts_with: [String!] + features_ends_with: [String!] + features_not_ends_with: [String!] + operators: _PersonFilter + operators_not: _PersonFilter + operators_in: [_PersonFilter!] + operators_not_in: [_PersonFilter!] + operators_some: _PersonFilter + operators_none: _PersonFilter + operators_single: _PersonFilter + operators_every: _PersonFilter + reflexiveInterfaceRelationship: _CameraFilter + reflexiveInterfaceRelationship_not: _CameraFilter + reflexiveInterfaceRelationship_in: [_CameraFilter!] + reflexiveInterfaceRelationship_not_in: [_CameraFilter!] + reflexiveInterfaceRelationship_some: _CameraFilter + reflexiveInterfaceRelationship_none: _CameraFilter + reflexiveInterfaceRelationship_single: _CameraFilter + reflexiveInterfaceRelationship_every: _CameraFilter + } + + type NewCamera implements Camera { + type: String + id: ID! @unique + make: String + weight: Int + features: [String] + operators( + first: Int + offset: Int + orderBy: [_PersonOrdering] + filter: _PersonFilter + ): [Person] @relation(name: "cameras", direction: IN) + computedOperators( + name: String + first: Int + offset: Int + orderBy: [_PersonOrdering] + ): [Person] + @cypher(statement: "MATCH (this)<-[:cameras]-(p:Person) RETURN p") + reflexiveInterfaceRelationship( + first: Int + offset: Int + orderBy: [_CameraOrdering] + filter: _CameraFilter + ): [Camera] + @relation(name: "REFLEXIVE_INTERFACE_RELATIONSHIP", direction: OUT) + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String } + """ + Union type + block description + """ + union MovieSearch = Movie | Genre | Book + type _AddCameraManFavoriteCameraPayload @relation(name: "favoriteCamera", from: "CameraMan", to: "Camera") { + "Field for the CameraMan node this favoriteCamera [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: CameraMan + "Field for the Camera node this favoriteCamera [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } type _RemoveCameraManFavoriteCameraPayload @relation(name: "favoriteCamera", from: "CameraMan", to: "Camera") { + "Field for the CameraMan node this favoriteCamera [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: CameraMan + "Field for the Camera node this favoriteCamera [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } + type _MergeCameraManFavoriteCameraPayload @relation(name: "favoriteCamera", from: "CameraMan", to: "Camera") { + "Field for the CameraMan node this favoriteCamera [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: CameraMan + "Field for the Camera node this favoriteCamera [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } + type _AddCameraManCamerasPayload @relation(name: "cameras", from: "CameraMan", to: "Camera") { + "Field for the CameraMan node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: CameraMan + "Field for the Camera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } type _RemoveCameraManCamerasPayload @relation(name: "cameras", from: "CameraMan", to: "Camera") { + "Field for the CameraMan node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: CameraMan + "Field for the Camera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } type _MergeCameraManCamerasPayload @relation(name: "cameras", from: "CameraMan", to: "Camera") { + "Field for the CameraMan node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: CameraMan + "Field for the Camera node this cameras [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Camera } - enum _InterfacedRelationshipTypeOrdering { - string_asc - string_desc - boolean_asc - boolean_desc - _id_asc - _id_desc + type _AddCameraManCameraBuddyPayload + @relation(name: "cameraBuddy", from: "CameraMan", to: "Person") { + "Field for the CameraMan node this cameraBuddy [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: CameraMan + "Field for the Person node this cameraBuddy [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person } - type _AddPersonInterfacedRelationshipTypePayload + type _RemoveCameraManCameraBuddyPayload + @relation(name: "cameraBuddy", from: "CameraMan", to: "Person") { + "Field for the CameraMan node this cameraBuddy [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: CameraMan + "Field for the Person node this cameraBuddy [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + } + + type _MergeCameraManCameraBuddyPayload + @relation(name: "cameraBuddy", from: "CameraMan", to: "Person") { + "Field for the CameraMan node this cameraBuddy [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." + from: CameraMan + "Field for the Person node this cameraBuddy [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." + to: Person + } + + type _AddCameraManInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _RemovePersonInterfacedRelationshipTypePayload + type _RemoveCameraManInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre } - type _UpdatePersonInterfacedRelationshipTypePayload + type _UpdateCameraManInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _MergePersonInterfacedRelationshipTypePayload + type _MergeCameraManInterfacedRelationshipTypePayload @relation( name: "INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Genre" ) { + "Field for the Person node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Genre node this INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Genre string: String! boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _PersonReflexiveInterfacedRelationshipTypeDirections - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { - from( - first: Int - offset: Int - orderBy: [_ReflexiveInterfacedRelationshipTypeOrdering] - filter: _ReflexiveInterfacedRelationshipTypeFilter - ): [_PersonReflexiveInterfacedRelationshipType] - to( - first: Int - offset: Int - orderBy: [_ReflexiveInterfacedRelationshipTypeOrdering] - filter: _ReflexiveInterfacedRelationshipTypeFilter - ): [_PersonReflexiveInterfacedRelationshipType] - } - - type _PersonReflexiveInterfacedRelationshipType - @relation( - name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" - from: "Person" - to: "Person" - ) { - boolean: Boolean - _id: String - Person: Person - } - - input _ReflexiveInterfacedRelationshipTypeDirectionsFilter { - from: _ReflexiveInterfacedRelationshipTypeFilter - to: _ReflexiveInterfacedRelationshipTypeFilter - } - - enum _ReflexiveInterfacedRelationshipTypeOrdering { - boolean_asc - boolean_desc - _id_asc - _id_desc - } - - input _ReflexiveInterfacedRelationshipTypeFilter { - AND: [_ReflexiveInterfacedRelationshipTypeFilter!] - OR: [_ReflexiveInterfacedRelationshipTypeFilter!] - boolean: Boolean - boolean_not: Boolean - Person: _PersonFilter - } - input _ReflexiveInterfacedRelationshipTypeInput { - boolean: Boolean - } - - type _AddPersonReflexiveInterfacedRelationshipTypePayload + type _AddCameraManReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _RemovePersonReflexiveInterfacedRelationshipTypePayload + type _RemoveCameraManReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person } - type _UpdatePersonReflexiveInterfacedRelationshipTypePayload + type _UpdateCameraManReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - type _MergePersonReflexiveInterfacedRelationshipTypePayload + type _MergeCameraManReflexiveInterfacedRelationshipTypePayload @relation( name: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" from: "Person" to: "Person" ) { + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: Person + "Field for the Person node this REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: Person boolean: Boolean + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this relationship." _id: String } - input _PersonInput { + input _CameraManInput { userId: ID! } - type _AddCameraManCameraBuddyPayload - @relation(name: "cameraBuddy", from: "CameraMan", to: "Person") { - from: CameraMan - to: Person + enum _CameraManOrdering { + userId_asc + userId_desc + name_asc + name_desc + extensionScalar_asc + extensionScalar_desc + _id_asc + _id_desc } - type _RemoveCameraManCameraBuddyPayload - @relation(name: "cameraBuddy", from: "CameraMan", to: "Person") { - from: CameraMan - to: Person + input _CameraManFilter { + AND: [_CameraManFilter!] + OR: [_CameraManFilter!] + userId: ID + userId_not: ID + userId_in: [ID!] + userId_not_in: [ID!] + userId_contains: ID + userId_not_contains: ID + userId_starts_with: ID + userId_not_starts_with: ID + userId_ends_with: ID + userId_not_ends_with: ID + name: String + name_not: String + name_in: [String!] + name_not_in: [String!] + name_contains: String + name_not_contains: String + name_starts_with: String + name_not_starts_with: String + name_ends_with: String + name_not_ends_with: String + favoriteCamera: _CameraFilter + favoriteCamera_not: _CameraFilter + favoriteCamera_in: [_CameraFilter!] + favoriteCamera_not_in: [_CameraFilter!] + cameras: _CameraFilter + cameras_not: _CameraFilter + cameras_in: [_CameraFilter!] + cameras_not_in: [_CameraFilter!] + cameras_some: _CameraFilter + cameras_none: _CameraFilter + cameras_single: _CameraFilter + cameras_every: _CameraFilter + cameraBuddy: _PersonFilter + cameraBuddy_not: _PersonFilter + cameraBuddy_in: [_PersonFilter!] + cameraBuddy_not_in: [_PersonFilter!] + extensionScalar: String + extensionScalar_not: String + extensionScalar_in: [String!] + extensionScalar_not_in: [String!] + extensionScalar_contains: String + extensionScalar_not_contains: String + extensionScalar_starts_with: String + extensionScalar_not_starts_with: String + extensionScalar_ends_with: String + extensionScalar_not_ends_with: String + interfacedRelationshipType: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_not: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_in: [_PersonInterfacedRelationshipTypeFilter!] + interfacedRelationshipType_not_in: [_PersonInterfacedRelationshipTypeFilter!] + interfacedRelationshipType_some: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_none: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_single: _PersonInterfacedRelationshipTypeFilter + interfacedRelationshipType_every: _PersonInterfacedRelationshipTypeFilter + reflexiveInterfacedRelationshipType: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_not: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] + reflexiveInterfacedRelationshipType_not_in: [_ReflexiveInterfacedRelationshipTypeDirectionsFilter!] + reflexiveInterfacedRelationshipType_some: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_none: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_single: _ReflexiveInterfacedRelationshipTypeDirectionsFilter + reflexiveInterfacedRelationshipType_every: _ReflexiveInterfacedRelationshipTypeDirectionsFilter } - type _MergeCameraManCameraBuddyPayload - @relation(name: "cameraBuddy", from: "CameraMan", to: "Person") { - from: CameraMan - to: Person + type CameraMan implements Person { + userId: ID! + name: String + favoriteCamera(filter: _CameraFilter): Camera + @relation(name: "favoriteCamera", direction: "OUT") + heaviestCamera( + first: Int + offset: Int + orderBy: [_CameraOrdering] + ): [Camera] + @cypher( + statement: "MATCH (c: Camera)--(this) RETURN c ORDER BY c.weight DESC LIMIT 1" + ) + cameras( + first: Int + offset: Int + orderBy: [_CameraOrdering] + filter: _CameraFilter + ): [Camera!]! @relation(name: "cameras", direction: "OUT") + cameraBuddy(filter: _PersonFilter): Person + @relation(name: "cameraBuddy", direction: "OUT") + extensionScalar: String + interfacedRelationshipType( + first: Int + offset: Int + orderBy: [_InterfacedRelationshipTypeOrdering] + filter: _PersonInterfacedRelationshipTypeFilter + ): [_PersonInterfacedRelationshipType] + reflexiveInterfacedRelationshipType: _PersonReflexiveInterfacedRelationshipTypeDirections + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String } type _AddUniqueNodeTestRelationPayload @@ -5445,7 +3417,9 @@ test.cb('Test augmented schema', t => { from: "UniqueNode" to: "UniqueStringNode" ) { + "Field for the UniqueNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: UniqueNode + "Field for the UniqueStringNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: UniqueStringNode } @@ -5455,7 +3429,9 @@ test.cb('Test augmented schema', t => { from: "UniqueNode" to: "UniqueStringNode" ) { + "Field for the UniqueNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: UniqueNode + "Field for the UniqueStringNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: UniqueStringNode } @@ -5465,7 +3441,9 @@ test.cb('Test augmented schema', t => { from: "UniqueNode" to: "UniqueStringNode" ) { + "Field for the UniqueNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: UniqueNode + "Field for the UniqueStringNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: UniqueStringNode } @@ -5537,6 +3515,7 @@ test.cb('Test augmented schema', t => { orderBy: [_UniqueStringNodeOrdering] filter: _UniqueStringNodeFilter ): [UniqueStringNode] @relation(name: "TEST_RELATION", direction: OUT) + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." _id: String } @@ -5546,7 +3525,9 @@ test.cb('Test augmented schema', t => { from: "UniqueNode" to: "UniqueStringNode" ) { + "Field for the UniqueNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: UniqueNode + "Field for the UniqueStringNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: UniqueStringNode } @@ -5556,7 +3537,9 @@ test.cb('Test augmented schema', t => { from: "UniqueNode" to: "UniqueStringNode" ) { + "Field for the UniqueNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: UniqueNode + "Field for the UniqueStringNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: UniqueStringNode } @@ -5566,61 +3549,319 @@ test.cb('Test augmented schema', t => { from: "UniqueNode" to: "UniqueStringNode" ) { + "Field for the UniqueNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is coming from." from: UniqueNode + "Field for the UniqueStringNode node this TEST_RELATION [relationship](https://grandstack.io/docs/graphql-relationship-types) is going to." to: UniqueStringNode } - input _UniqueStringNodeInput { - uniqueString: String! + input _UniqueStringNodeInput { + uniqueString: String! + } + + enum _UniqueStringNodeOrdering { + id_asc + id_desc + uniqueString_asc + uniqueString_desc + _id_asc + _id_desc + } + + input _UniqueStringNodeFilter { + AND: [_UniqueStringNodeFilter!] + OR: [_UniqueStringNodeFilter!] + id: ID + id_not: ID + id_in: [ID!] + id_not_in: [ID!] + id_contains: ID + id_not_contains: ID + id_starts_with: ID + id_not_starts_with: ID + id_ends_with: ID + id_not_ends_with: ID + uniqueString: String + uniqueString_not: String + uniqueString_in: [String!] + uniqueString_not_in: [String!] + uniqueString_contains: String + uniqueString_not_contains: String + uniqueString_starts_with: String + uniqueString_not_starts_with: String + uniqueString_ends_with: String + uniqueString_not_ends_with: String + testRelation: _UniqueNodeFilter + testRelation_not: _UniqueNodeFilter + testRelation_in: [_UniqueNodeFilter!] + testRelation_not_in: [_UniqueNodeFilter!] + testRelation_some: _UniqueNodeFilter + testRelation_none: _UniqueNodeFilter + testRelation_single: _UniqueNodeFilter + testRelation_every: _UniqueNodeFilter + } + + type UniqueStringNode { + id: ID! + "Generated field for querying the Neo4j [system id](https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id) of this node." + _id: String + } + + "Generated Time input object for Neo4j [Temporal field arguments](https://grandstack.io/docs/graphql-temporal-types-datetime/#temporal-query-arguments)." + input _Neo4jTimeInput { + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + timezone: String + "Creates a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime/#using-temporal-fields-in-mutations) Time value using a [String format](https://neo4j.com/docs/cypher-manual/current/functions/temporal/time/#functions-time-create-string)." + formatted: String + } + + "Generated Time object type for Neo4j [Temporal fields](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries)." + type _Neo4jTime { + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + timezone: String + "Outputs a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries) Time value as a String type by using the [toString](https://neo4j.com/docs/cypher-manual/current/functions/string/#functions-tostring) Cypher function." + formatted: String + } + + "Generated Date input object for Neo4j [Temporal field arguments](https://grandstack.io/docs/graphql-temporal-types-datetime/#temporal-query-arguments)." + input _Neo4jDateInput { + year: Int + month: Int + day: Int + "Creates a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime/#using-temporal-fields-in-mutations) Date value using a [String format](https://neo4j.com/docs/cypher-manual/current/functions/temporal/date/#functions-date-create-string)." + formatted: String + } + + "Generated Date object type for Neo4j [Temporal fields](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries)." + type _Neo4jDate { + year: Int + month: Int + day: Int + "Outputs a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries) Date value as a String type by using the [toString](https://neo4j.com/docs/cypher-manual/current/functions/string/#functions-tostring) Cypher function." + formatted: String + } + + "Generated DateTime input object for Neo4j [Temporal field arguments](https://grandstack.io/docs/graphql-temporal-types-datetime/#temporal-query-arguments)." + input _Neo4jDateTimeInput { + year: Int + month: Int + day: Int + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + timezone: String + "Creates a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime/#using-temporal-fields-in-mutations) DateTime value using a [String format](https://neo4j.com/docs/cypher-manual/current/functions/temporal/datetime/#functions-datetime-create-string)." + formatted: String + } + + "Generated DateTime object type for Neo4j [Temporal fields](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries)." + type _Neo4jDateTime { + year: Int + month: Int + day: Int + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + timezone: String + "Outputs a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries) DateTime value as a String type by using the [toString](https://neo4j.com/docs/cypher-manual/current/functions/string/#functions-tostring) Cypher function." + formatted: String + } + + "Generated LocalTime input object for Neo4j [Temporal field arguments](https://grandstack.io/docs/graphql-temporal-types-datetime/#temporal-query-arguments)." + input _Neo4jLocalTimeInput { + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + "Creates a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime/#using-temporal-fields-in-mutations) LocalTime value using a [String format](https://neo4j.com/docs/cypher-manual/current/functions/temporal/localtime/#functions-localtime-create-string)." + formatted: String + } + + "Generated LocalTime object type for Neo4j [Temporal fields](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries)." + type _Neo4jLocalTime { + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + "Outputs a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries) LocalTime value as a String type by using the [toString](https://neo4j.com/docs/cypher-manual/current/functions/string/#functions-tostring) Cypher function." + formatted: String + } + + "Generated LocalDateTime input object for Neo4j [Temporal field arguments](https://grandstack.io/docs/graphql-temporal-types-datetime/#temporal-query-arguments)." + input _Neo4jLocalDateTimeInput { + year: Int + month: Int + day: Int + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + "Creates a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime/#using-temporal-fields-in-mutations) LocalDateTime value using a [String format](https://neo4j.com/docs/cypher-manual/current/functions/temporal/localdatetime/#functions-localdatetime-create-string)." + formatted: String + } + + "Generated LocalDateTime object type for Neo4j [Temporal fields](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries)." + type _Neo4jLocalDateTime { + year: Int + month: Int + day: Int + hour: Int + minute: Int + second: Int + millisecond: Int + microsecond: Int + nanosecond: Int + "Outputs a Neo4j [Temporal](https://grandstack.io/docs/graphql-temporal-types-datetime#using-temporal-fields-in-queries) LocalDateTime value as a String type by using the [toString](https://neo4j.com/docs/cypher-manual/current/functions/string/#functions-tostring) Cypher function." + formatted: String + } + + input _Neo4jPointDistanceFilter { + point: _Neo4jPointInput! + distance: Float! + } + + "Generated Point input object for Neo4j [Spatial field arguments](https://grandstack.io/docs/graphql-spatial-types/#point-query-arguments)." + input _Neo4jPointInput { + x: Float + y: Float + z: Float + longitude: Float + latitude: Float + height: Float + crs: String + srid: Int + } + + "Generated Point object type for Neo4j [Spatial fields](https://grandstack.io/docs/graphql-spatial-types#using-point-in-queries)." + type _Neo4jPoint { + x: Float + y: Float + z: Float + longitude: Float + latitude: Float + height: Float + crs: String + srid: Int + } + + enum _RelationDirections { + IN + OUT + } + + """ + Directive definition + block + description + """ + directive @cypher(statement: String) on FIELD_DEFINITION + + directive @relation( + name: String + direction: _RelationDirections + from: String + to: String + ) on FIELD_DEFINITION | OBJECT + + directive @additionalLabels(labels: [String]) on OBJECT + + directive @MutationMeta( + relationship: String + from: String + to: String + ) on FIELD_DEFINITION + + directive @neo4j_ignore on FIELD_DEFINITION + + directive @id on FIELD_DEFINITION + + directive @unique on FIELD_DEFINITION + + directive @index on FIELD_DEFINITION + + directive @isAuthenticated on OBJECT | FIELD_DEFINITION + + directive @hasRole(roles: [Role]) on OBJECT | FIELD_DEFINITION + + directive @hasScope(scopes: [String]) on OBJECT | FIELD_DEFINITION + + extend type Movie @hasRole(roles: [admin]) { + currentUserId(strArg: String): String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + ) + "Object type extension field line description" + interfaceNoScalars( + orderBy: _InterfaceNoScalarsOrdering + first: Int + offset: Int + filter: _InterfaceNoScalarsFilter + ): [InterfaceNoScalars] + @relation(name: "INTERFACE_NO_SCALARS", direction: OUT) + extensionScalar: String + extensionNode( + first: Int + offset: Int + orderBy: [_GenreOrdering] + filter: _GenreFilter + ): [Genre] @relation(name: "IN_GENRE", direction: "OUT") + } + + extend interface Person { + extensionScalar: String + } + + extend type Actor implements Person + + extend enum BookGenre { + Math } - enum _UniqueStringNodeOrdering { - id_asc - id_desc - uniqueString_asc - uniqueString_desc - _id_asc - _id_desc + extend type QueryA { + MovieSearch(first: Int, offset: Int): [MovieSearch] + computedMovieSearch(first: Int, offset: Int): [MovieSearch] + @cypher(statement: "MATCH (ms:MovieSearch) RETURN ms") } - input _UniqueStringNodeFilter { - AND: [_UniqueStringNodeFilter!] - OR: [_UniqueStringNodeFilter!] - id: ID - id_not: ID - id_in: [ID!] - id_not_in: [ID!] - id_contains: ID - id_not_contains: ID - id_starts_with: ID - id_not_starts_with: ID - id_ends_with: ID - id_not_ends_with: ID - uniqueString: String - uniqueString_not: String - uniqueString_in: [String!] - uniqueString_not_in: [String!] - uniqueString_contains: String - uniqueString_not_contains: String - uniqueString_starts_with: String - uniqueString_not_starts_with: String - uniqueString_ends_with: String - uniqueString_not_ends_with: String - testRelation: _UniqueNodeFilter - testRelation_not: _UniqueNodeFilter - testRelation_in: [_UniqueNodeFilter!] - testRelation_not_in: [_UniqueNodeFilter!] - testRelation_some: _UniqueNodeFilter - testRelation_none: _UniqueNodeFilter - testRelation_single: _UniqueNodeFilter - testRelation_every: _UniqueNodeFilter + extend type Mutation { + CustomCamera: Camera + @cypher( + statement: "CREATE (newCamera:Camera:NewCamera {id: apoc.create.uuid(), type: 'macro'}) RETURN newCamera" + ) + CustomCameras: [Camera] + @cypher( + statement: "CREATE (newCamera:Camera:NewCamera {id: apoc.create.uuid(), type: 'macro', features: ['selfie', 'zoom']}) CREATE (oldCamera:Camera:OldCamera {id: apoc.create.uuid(), type: 'floating', smell: 'rusty' }) RETURN [newCamera, oldCamera]" + ) } - type UniqueStringNode { - id: ID! - _id: String + extend input strInput { + extensionArg: String } + extend union MovieSearch = Actor | OldCamera + extend type UniqueStringNode { uniqueString: String @unique testRelation( @@ -5628,235 +3869,2472 @@ test.cb('Test augmented schema', t => { offset: Int orderBy: [_UniqueNodeOrdering] filter: _UniqueNodeFilter - ): [UniqueNode] @relation(name: "TEST_RELATION", direction: IN) - } - - type SubscriptionC { - testSubscribe: Boolean + ): [UniqueNode] @relation(name: "TEST_RELATION", direction: IN) + } + + "Query type line description" + type QueryA { + """ + Query field + block + description + """ + MoviesByYear( + year: Int + first: Int + offset: Int + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] + MoviesByYears( + year: [Int] + released: [_Neo4jDateTimeInput] + first: Int + offset: Int + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] + MovieById(movieId: ID!, filter: _MovieFilter): Movie + MovieBy_Id(_id: String!, filter: _MovieFilter): Movie + GenresBySubstring( + substring: String + first: Int + offset: Int + orderBy: [_GenreOrdering] + ): [Genre] + @cypher( + statement: "MATCH (g:Genre) WHERE toLower(g.name) CONTAINS toLower($substring) RETURN g" + ) + "Object type query field line description" + State( + first: Int + offset: Int + orderBy: [_StateOrdering] + filter: _StateFilter + ): [State] + User( + userId: ID + name: String + _id: String + first: Int + offset: Int + orderBy: [_UserOrdering] + filter: _UserFilter + ): [User] + Books( + first: Int + offset: Int + orderBy: [_BookOrdering] + filter: _BookFilter + ): [Book] + currentUserId: String + @cypher( + statement: "RETURN $cypherParams.currentUserId AS currentUserId" + ) + computedBoolean: Boolean @cypher(statement: "RETURN true") + computedFloat: Float @cypher(statement: "RETURN 3.14") + computedInt: Int @cypher(statement: "RETURN 1") + computedIntList: [Int] + @cypher(statement: "UNWIND [1, 2, 3] AS intList RETURN intList") + computedStringList: [String] + @cypher( + statement: "UNWIND ['hello', 'world'] AS stringList RETURN stringList" + ) + computedTemporal: _Neo4jDateTime + @cypher( + statement: "WITH datetime() AS now RETURN { year: now.year, month: now.month , day: now.day , hour: now.hour , minute: now.minute , second: now.second , millisecond: now.millisecond , microsecond: now.microsecond , nanosecond: now.nanosecond , timezone: now.timezone , formatted: toString(now) }" + ) + computedSpatial: _Neo4jPoint + @cypher( + statement: "WITH point({ x: 10, y: 20, z: 15 }) AS instance RETURN { x: instance.x, y: instance.y, z: instance.z, crs: instance.crs }" + ) + computedObjectWithCypherParams: currentUserId + @cypher(statement: "RETURN { userId: $cypherParams.currentUserId }") + customWithArguments(strArg: String, strInputArg: strInput): String + @cypher(statement: "RETURN $strInputArg.strArg") + CasedType( + first: Int + offset: Int + orderBy: [_CasedTypeOrdering] + filter: _CasedTypeFilter + ): [CasedType] + "Interface type query field line description" + Camera( + type: String + first: Int + orderBy: [_CameraOrdering] + filter: _CameraFilter + offset: Int + ): [Camera] + Person( + userId: ID + name: String + extensionScalar: String + _id: String + first: Int + offset: Int + orderBy: [_PersonOrdering] + filter: _PersonFilter + ): [Person] + InterfaceNoScalars( + orderBy: _InterfaceNoScalarsOrdering + first: Int + offset: Int + filter: _InterfaceNoScalarsFilter + ): [InterfaceNoScalars] + CustomCameras( + first: Int + offset: Int + orderBy: [_CameraOrdering] + ): [Camera] @cypher(statement: "MATCH (c:Camera) RETURN c") + CustomCamera: Camera @cypher(statement: "MATCH (c:Camera) RETURN c") + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for Movie type nodes." + Movie( + _id: String + movieId: ID + title: String + someprefix_title_with_underscores: String + year: Int + released: _Neo4jDateTimeInput + plot: String + poster: String + imdbRating: Float + avgStars: Float + location: _Neo4jPointInput + locations: [_Neo4jPointInput] + years: [Int] + titles: [String] + imdbRatings: [Float] + releases: [_Neo4jDateTimeInput] + booleans: [Boolean] + enums: [BookGenre] + extensionScalar: String + first: Int + offset: Int + orderBy: [_MovieOrdering] + filter: _MovieFilter + ): [Movie] @hasScope(scopes: ["Movie: Read", "read:movie"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for Genre type nodes." + Genre( + _id: String + name: String + first: Int + offset: Int + orderBy: [_GenreOrdering] + filter: _GenreFilter + ): [Genre] @hasScope(scopes: ["Genre: Read", "read:genre"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for Actor type nodes." + Actor( + userId: ID + name: String + extensionScalar: String + datetimes: [_Neo4jDateTimeInput] + strings: [String] + _id: String + first: Int + offset: Int + orderBy: [_ActorOrdering] + filter: _ActorFilter + ): [Actor] @hasScope(scopes: ["Actor: Read", "read:actor"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for Book type nodes." + Book( + genre: BookGenre + _id: String + first: Int + offset: Int + orderBy: [_BookOrdering] + filter: _BookFilter + ): [Book] @hasScope(scopes: ["Book: Read", "read:book"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for TemporalNode type nodes." + TemporalNode( + datetime: _Neo4jDateTimeInput + name: String + time: _Neo4jTimeInput + date: _Neo4jDateInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetimes: [_Neo4jLocalDateTimeInput] + _id: String + first: Int + offset: Int + orderBy: [_TemporalNodeOrdering] + filter: _TemporalNodeFilter + ): [TemporalNode] + @hasScope(scopes: ["TemporalNode: Read", "read:temporalnode"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for SpatialNode type nodes." + SpatialNode( + id: ID + point: _Neo4jPointInput + _id: String + first: Int + offset: Int + orderBy: [_SpatialNodeOrdering] + filter: _SpatialNodeFilter + ): [SpatialNode] + @hasScope(scopes: ["SpatialNode: Read", "read:spatialnode"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for OldCamera type nodes." + OldCamera( + type: String + id: ID + make: String + weight: Int + smell: String + _id: String + first: Int + offset: Int + orderBy: [_OldCameraOrdering] + filter: _OldCameraFilter + ): [OldCamera] @hasScope(scopes: ["OldCamera: Read", "read:oldcamera"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for NewCamera type nodes." + NewCamera( + type: String + id: ID + make: String + weight: Int + features: [String] + _id: String + first: Int + offset: Int + orderBy: [_NewCameraOrdering] + filter: _NewCameraFilter + ): [NewCamera] @hasScope(scopes: ["NewCamera: Read", "read:newcamera"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for CameraMan type nodes." + CameraMan( + userId: ID + name: String + extensionScalar: String + _id: String + first: Int + offset: Int + orderBy: [_CameraManOrdering] + filter: _CameraManFilter + ): [CameraMan] @hasScope(scopes: ["CameraMan: Read", "read:cameraman"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for UniqueNode type nodes." + UniqueNode( + string: String + id: ID + anotherId: ID + _id: String + first: Int + offset: Int + orderBy: [_UniqueNodeOrdering] + filter: _UniqueNodeFilter + ): [UniqueNode] @hasScope(scopes: ["UniqueNode: Read", "read:uniquenode"]) + "[Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for UniqueStringNode type nodes." + UniqueStringNode( + id: ID + uniqueString: String + _id: String + first: Int + offset: Int + orderBy: [_UniqueStringNodeOrdering] + filter: _UniqueStringNodeFilter + ): [UniqueStringNode] + @hasScope(scopes: ["UniqueStringNode: Read", "read:uniquestringnode"]) } - type FriendOf @relation { - from: User + "Mutation type line description" + type Mutation { + "Mutation field line description" currentUserId: String + @cypher(statement: "RETURN $cypherParams.currentUserId") + """ + Mutation field + block + description + """ + computedObjectWithCypherParams: currentUserId + @cypher(statement: "RETURN { userId: $cypherParams.currentUserId }") + computedTemporal: _Neo4jDateTime @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + statement: "WITH datetime() AS now RETURN { year: now.year, month: now.month , day: now.day , hour: now.hour , minute: now.minute , second: now.second , millisecond: now.millisecond , microsecond: now.microsecond , nanosecond: now.nanosecond , timezone: now.timezone , formatted: toString(now) }" + ) + computedSpatial: _Neo4jPoint + @cypher( + statement: "WITH point({ x: 10, y: 20, z: 15 }) AS instance RETURN { x: instance.x, y: instance.y, z: instance.z, crs: instance.crs }" + ) + computedStringList: [String] + @cypher( + statement: "UNWIND ['hello', 'world'] AS stringList RETURN stringList" + ) + customWithArguments( + """ + Mutation field argument + block description + """ + strArg: String + strInputArg: strInput + ): String @cypher(statement: "RETURN $strInputArg.strArg") + testPublish: Boolean @neo4j_ignore + computedMovieSearch: [MovieSearch] + @cypher(statement: "MATCH (ms:MovieSearch) RETURN ms") + customCreateNode( + integer: Int + datetime: _Neo4jDateTimeInput + integers: [Int] + datetimes: [_Neo4jDateTimeInput] + point: _Neo4jPointInput + points: [_Neo4jPointInput] + ): Boolean + @cypher( + statement: "CREATE (n:Node { integer: $integer, datetime: datetime($datetime), point: point($point), integers: $integers, datetimes: [value IN $datetimes | datetime(value)], points: [value IN $points | point(value)] }) RETURN TRUE" + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the IN_GENRE relationship." + AddMovieExtensionNode( + from: _MovieInput! + to: _GenreInput! + ): _AddMovieExtensionNodePayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: [ + "Movie: Create" + "create:movie" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the IN_GENRE relationship." + RemoveMovieExtensionNode( + from: _MovieInput! + to: _GenreInput! + ): _RemoveMovieExtensionNodePayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: [ + "Movie: Delete" + "delete:movie" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the IN_GENRE relationship." + MergeMovieExtensionNode( + from: _MovieInput! + to: _GenreInput! + ): _MergeMovieExtensionNodePayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: ["Movie: Merge", "merge:movie", "Genre: Merge", "merge:genre"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the IN_GENRE relationship." + AddMovieGenres( + from: _MovieInput! + to: _GenreInput! + ): _AddMovieGenresPayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: [ + "Movie: Create" + "create:movie" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the IN_GENRE relationship." + RemoveMovieGenres( + from: _MovieInput! + to: _GenreInput! + ): _RemoveMovieGenresPayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: [ + "Movie: Delete" + "delete:movie" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the IN_GENRE relationship." + MergeMovieGenres( + from: _MovieInput! + to: _GenreInput! + ): _MergeMovieGenresPayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: ["Movie: Merge", "merge:movie", "Genre: Merge", "merge:genre"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the ACTED_IN relationship." + AddMovieActors( + from: _ActorInput! + to: _MovieInput! + ): _AddMovieActorsPayload + @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") + @hasScope( + scopes: [ + "Actor: Create" + "create:actor" + "Movie: Create" + "create:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the ACTED_IN relationship." + RemoveMovieActors( + from: _ActorInput! + to: _MovieInput! + ): _RemoveMovieActorsPayload + @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") + @hasScope( + scopes: [ + "Actor: Delete" + "delete:actor" + "Movie: Delete" + "delete:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the ACTED_IN relationship." + MergeMovieActors( + from: _ActorInput! + to: _MovieInput! + ): _MergeMovieActorsPayload + @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") + @hasScope( + scopes: ["Actor: Merge", "merge:actor", "Movie: Merge", "merge:movie"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the FILMED_IN relationship." + AddMovieFilmedIn( + from: _MovieInput! + to: _StateInput! + ): _AddMovieFilmedInPayload + @MutationMeta(relationship: "FILMED_IN", from: "Movie", to: "State") + @hasScope( + scopes: [ + "Movie: Create" + "create:movie" + "State: Create" + "create:state" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the FILMED_IN relationship." + RemoveMovieFilmedIn( + from: _MovieInput! + to: _StateInput! + ): _RemoveMovieFilmedInPayload + @MutationMeta(relationship: "FILMED_IN", from: "Movie", to: "State") + @hasScope( + scopes: [ + "Movie: Delete" + "delete:movie" + "State: Delete" + "delete:state" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the FILMED_IN relationship." + MergeMovieFilmedIn( + from: _MovieInput! + to: _StateInput! + ): _MergeMovieFilmedInPayload + @MutationMeta(relationship: "FILMED_IN", from: "Movie", to: "State") + @hasScope( + scopes: ["Movie: Merge", "merge:movie", "State: Merge", "merge:state"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the RATED relationship." + AddMovieRatings( + from: _UserInput! + to: _MovieInput! + data: _RatedInput! + ): _AddMovieRatingsPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Create" + "create:user" + "Movie: Create" + "create:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the RATED relationship." + RemoveMovieRatings( + from: _UserInput! + to: _MovieInput! + ): _RemoveMovieRatingsPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Delete" + "delete:user" + "Movie: Delete" + "delete:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the RATED relationship." + UpdateMovieRatings( + from: _UserInput! + to: _MovieInput! + data: _RatedInput! + ): _UpdateMovieRatingsPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Update" + "update:user" + "Movie: Update" + "update:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the RATED relationship." + MergeMovieRatings( + from: _UserInput! + to: _MovieInput! + data: _RatedInput! + ): _MergeMovieRatingsPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: ["User: Merge", "merge:user", "Movie: Merge", "merge:movie"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a Movie node." + CreateMovie( + movieId: ID + title: String + someprefix_title_with_underscores: String + year: Int + released: _Neo4jDateTimeInput + plot: String + poster: String + imdbRating: Float + avgStars: Float + location: _Neo4jPointInput + locations: [_Neo4jPointInput] + years: [Int] + titles: [String] + imdbRatings: [Float] + releases: [_Neo4jDateTimeInput] + booleans: [Boolean] + enums: [BookGenre] + extensionScalar: String + ): Movie @hasScope(scopes: ["Movie: Create", "create:movie"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a Movie node." + UpdateMovie( + movieId: ID! + title: String + someprefix_title_with_underscores: String + year: Int + released: _Neo4jDateTimeInput + plot: String + poster: String + imdbRating: Float + avgStars: Float + location: _Neo4jPointInput + locations: [_Neo4jPointInput] + years: [Int] + titles: [String] + imdbRatings: [Float] + releases: [_Neo4jDateTimeInput] + booleans: [Boolean] + enums: [BookGenre] + extensionScalar: String + ): Movie @hasScope(scopes: ["Movie: Update", "update:movie"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a Movie node." + DeleteMovie(movieId: ID!): Movie + @hasScope(scopes: ["Movie: Delete", "delete:movie"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a Movie node." + MergeMovie( + movieId: ID! + title: String + someprefix_title_with_underscores: String + year: Int + released: _Neo4jDateTimeInput + plot: String + poster: String + imdbRating: Float + avgStars: Float + location: _Neo4jPointInput + locations: [_Neo4jPointInput] + years: [Int] + titles: [String] + imdbRatings: [Float] + releases: [_Neo4jDateTimeInput] + booleans: [Boolean] + enums: [BookGenre] + extensionScalar: String + ): Movie @hasScope(scopes: ["Movie: Merge", "merge:movie"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the IN_GENRE relationship." + AddGenreMovies( + from: _MovieInput! + to: _GenreInput! + ): _AddGenreMoviesPayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: [ + "Movie: Create" + "create:movie" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the IN_GENRE relationship." + RemoveGenreMovies( + from: _MovieInput! + to: _GenreInput! + ): _RemoveGenreMoviesPayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: [ + "Movie: Delete" + "delete:movie" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the IN_GENRE relationship." + MergeGenreMovies( + from: _MovieInput! + to: _GenreInput! + ): _MergeGenreMoviesPayload + @MutationMeta(relationship: "IN_GENRE", from: "Movie", to: "Genre") + @hasScope( + scopes: ["Movie: Merge", "merge:movie", "Genre: Merge", "merge:genre"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + AddGenreInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _AddGenreInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveGenreInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + ): _RemoveGenreInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateGenreInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _UpdateGenreInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Genre: Update" + "update:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + MergeGenreInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _MergeGenreInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Genre: Merge" + "merge:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a Genre node." + CreateGenre(name: String): Genre + @hasScope(scopes: ["Genre: Create", "create:genre"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a Genre node." + DeleteGenre(name: String!): Genre + @hasScope(scopes: ["Genre: Delete", "delete:genre"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a Genre node." + MergeGenre(name: String!): Genre + @hasScope(scopes: ["Genre: Merge", "merge:genre"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a State node." + CreateState(name: String!, id: ID): State + @hasScope(scopes: ["State: Create", "create:state"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a State node." + UpdateState(name: String!, id: ID): State + @hasScope(scopes: ["State: Update", "update:state"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a State node." + DeleteState(name: String!): State + @hasScope(scopes: ["State: Delete", "delete:state"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a State node." + MergeState(name: String!, id: ID): State + @hasScope(scopes: ["State: Merge", "merge:state"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + AddPersonInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _AddPersonInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the INTERFACED_RELATIONSHIP_TYPE relationship." + RemovePersonInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + ): _RemovePersonInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the INTERFACED_RELATIONSHIP_TYPE relationship." + UpdatePersonInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _UpdatePersonInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Genre: Update" + "update:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + MergePersonInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _MergePersonInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Genre: Merge" + "merge:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + AddPersonReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _AddPersonReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Person: Create" + "create:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + RemovePersonReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + ): _RemovePersonReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Person: Delete" + "delete:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + UpdatePersonReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _UpdatePersonReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Person: Update" + "update:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + MergePersonReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _MergePersonReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Person: Merge" + "merge:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the ACTED_IN relationship." + AddActorMovies( + from: _ActorInput! + to: _MovieInput! + ): _AddActorMoviesPayload + @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") + @hasScope( + scopes: [ + "Actor: Create" + "create:actor" + "Movie: Create" + "create:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the ACTED_IN relationship." + RemoveActorMovies( + from: _ActorInput! + to: _MovieInput! + ): _RemoveActorMoviesPayload + @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") + @hasScope( + scopes: [ + "Actor: Delete" + "delete:actor" + "Movie: Delete" + "delete:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the ACTED_IN relationship." + MergeActorMovies( + from: _ActorInput! + to: _MovieInput! + ): _MergeActorMoviesPayload + @MutationMeta(relationship: "ACTED_IN", from: "Actor", to: "Movie") + @hasScope( + scopes: ["Actor: Merge", "merge:actor", "Movie: Merge", "merge:movie"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the KNOWS relationship." + AddActorKnows( + from: _ActorInput! + to: _PersonInput! + ): _AddActorKnowsPayload + @MutationMeta(relationship: "KNOWS", from: "Actor", to: "Person") + @hasScope( + scopes: [ + "Actor: Create" + "create:actor" + "Person: Create" + "create:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the KNOWS relationship." + RemoveActorKnows( + from: _ActorInput! + to: _PersonInput! + ): _RemoveActorKnowsPayload + @MutationMeta(relationship: "KNOWS", from: "Actor", to: "Person") + @hasScope( + scopes: [ + "Actor: Delete" + "delete:actor" + "Person: Delete" + "delete:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the KNOWS relationship." + MergeActorKnows( + from: _ActorInput! + to: _PersonInput! + ): _MergeActorKnowsPayload + @MutationMeta(relationship: "KNOWS", from: "Actor", to: "Person") + @hasScope( + scopes: [ + "Actor: Merge" + "merge:actor" + "Person: Merge" + "merge:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + AddActorInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _AddActorInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveActorInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + ): _RemoveActorInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateActorInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _UpdateActorInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Genre: Update" + "update:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + MergeActorInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _MergeActorInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Genre: Merge" + "merge:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + AddActorReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _AddActorReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Person: Create" + "create:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveActorReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + ): _RemoveActorReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Person: Delete" + "delete:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateActorReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _UpdateActorReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Person: Update" + "update:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + MergeActorReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _MergeActorReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Person: Merge" + "merge:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a Actor node." + CreateActor( + userId: ID + name: String + extensionScalar: String + datetimes: [_Neo4jDateTimeInput] + strings: [String] + ): Actor @hasScope(scopes: ["Actor: Create", "create:actor"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a Actor node." + UpdateActor( + userId: ID! + name: String + extensionScalar: String + datetimes: [_Neo4jDateTimeInput] + strings: [String] + ): Actor @hasScope(scopes: ["Actor: Update", "update:actor"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a Actor node." + DeleteActor(userId: ID!): Actor + @hasScope(scopes: ["Actor: Delete", "delete:actor"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a Actor node." + MergeActor( + userId: ID! + name: String + extensionScalar: String + datetimes: [_Neo4jDateTimeInput] + strings: [String] + ): Actor @hasScope(scopes: ["Actor: Merge", "merge:actor"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + AddUserInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _AddUserInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveUserInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + ): _RemoveUserInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateUserInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _UpdateUserInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Genre: Update" + "update:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + MergeUserInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _MergeUserInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Genre: Merge" + "merge:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + AddUserReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _AddUserReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Person: Create" + "create:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveUserReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + ): _RemoveUserReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Person: Delete" + "delete:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateUserReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _UpdateUserReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Person: Update" + "update:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + MergeUserReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _MergeUserReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Person: Merge" + "merge:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the RATED relationship." + AddUserRated( + from: _UserInput! + to: _MovieInput! + data: _RatedInput! + ): _AddUserRatedPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Create" + "create:user" + "Movie: Create" + "create:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the RATED relationship." + RemoveUserRated( + from: _UserInput! + to: _MovieInput! + ): _RemoveUserRatedPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Delete" + "delete:user" + "Movie: Delete" + "delete:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the RATED relationship." + UpdateUserRated( + from: _UserInput! + to: _MovieInput! + data: _RatedInput! + ): _UpdateUserRatedPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Update" + "update:user" + "Movie: Update" + "update:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the RATED relationship." + MergeUserRated( + from: _UserInput! + to: _MovieInput! + data: _RatedInput! + ): _MergeUserRatedPayload + @MutationMeta(relationship: "RATED", from: "User", to: "Movie") + @hasScope( + scopes: ["User: Merge", "merge:user", "Movie: Merge", "merge:movie"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the FRIEND_OF relationship." + AddUserFriends( + from: _UserInput! + to: _UserInput! + data: _FriendOfInput! + ): _AddUserFriendsPayload + @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") + @hasScope( + scopes: ["User: Create", "create:user", "User: Create", "create:user"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the FRIEND_OF relationship." + RemoveUserFriends( + from: _UserInput! + to: _UserInput! + ): _RemoveUserFriendsPayload + @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") + @hasScope( + scopes: ["User: Delete", "delete:user", "User: Delete", "delete:user"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the FRIEND_OF relationship." + UpdateUserFriends( + from: _UserInput! + to: _UserInput! + data: _FriendOfInput! + ): _UpdateUserFriendsPayload + @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") + @hasScope( + scopes: ["User: Update", "update:user", "User: Update", "update:user"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the FRIEND_OF relationship." + MergeUserFriends( + from: _UserInput! + to: _UserInput! + data: _FriendOfInput! + ): _MergeUserFriendsPayload + @MutationMeta(relationship: "FRIEND_OF", from: "User", to: "User") + @hasScope( + scopes: ["User: Merge", "merge:user", "User: Merge", "merge:user"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the FAVORITED relationship." + AddUserFavorites( + from: _UserInput! + to: _MovieInput! + ): _AddUserFavoritesPayload + @MutationMeta(relationship: "FAVORITED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Create" + "create:user" + "Movie: Create" + "create:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the FAVORITED relationship." + RemoveUserFavorites( + from: _UserInput! + to: _MovieInput! + ): _RemoveUserFavoritesPayload + @MutationMeta(relationship: "FAVORITED", from: "User", to: "Movie") + @hasScope( + scopes: [ + "User: Delete" + "delete:user" + "Movie: Delete" + "delete:movie" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the FAVORITED relationship." + MergeUserFavorites( + from: _UserInput! + to: _MovieInput! + ): _MergeUserFavoritesPayload + @MutationMeta(relationship: "FAVORITED", from: "User", to: "Movie") + @hasScope( + scopes: ["User: Merge", "merge:user", "Movie: Merge", "merge:movie"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a User node." + CreateUser(userId: ID, name: String, extensionScalar: String): User + @hasScope(scopes: ["User: Create", "create:user"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a User node." + UpdateUser(userId: ID!, name: String, extensionScalar: String): User + @hasScope(scopes: ["User: Update", "update:user"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a User node." + DeleteUser(userId: ID!): User + @hasScope(scopes: ["User: Delete", "delete:user"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a User node." + MergeUser(userId: ID!, name: String, extensionScalar: String): User + @hasScope(scopes: ["User: Merge", "merge:user"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a Book node." + CreateBook(genre: BookGenre): Book + @hasScope(scopes: ["Book: Create", "create:book"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a Book node." + DeleteBook(genre: BookGenre!): Book + @hasScope(scopes: ["Book: Delete", "delete:book"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a Book node." + MergeBook(genre: BookGenre!): Book + @hasScope(scopes: ["Book: Merge", "merge:book"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a NodeTypeMutationTest node." + CreateNodeTypeMutationTest( + NodeTypeMutationTest: BookGenre + ): NodeTypeMutationTest + @hasScope( + scopes: [ + "NodeTypeMutationTest: Create" + "create:nodetypemutationtest" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a NodeTypeMutationTest node." + DeleteNodeTypeMutationTest( + NodeTypeMutationTest: BookGenre! + ): NodeTypeMutationTest + @hasScope( + scopes: [ + "NodeTypeMutationTest: Delete" + "delete:nodetypemutationtest" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a NodeTypeMutationTest node." + MergeNodeTypeMutationTest( + NodeTypeMutationTest: BookGenre! + ): NodeTypeMutationTest + @hasScope( + scopes: ["NodeTypeMutationTest: Merge", "merge:nodetypemutationtest"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a currentUserId node." + CreatecurrentUserId(userId: String): currentUserId + @hasScope(scopes: ["currentUserId: Create", "create:currentuserid"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a currentUserId node." + DeletecurrentUserId(userId: String!): currentUserId + @hasScope(scopes: ["currentUserId: Delete", "delete:currentuserid"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a currentUserId node." + MergecurrentUserId(userId: String!): currentUserId + @hasScope(scopes: ["currentUserId: Merge", "merge:currentuserid"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the TEMPORAL relationship." + AddTemporalNodeTemporalNodes( + from: _TemporalNodeInput! + to: _TemporalNodeInput! + ): _AddTemporalNodeTemporalNodesPayload + @MutationMeta( + relationship: "TEMPORAL" + from: "TemporalNode" + to: "TemporalNode" + ) + @hasScope( + scopes: [ + "TemporalNode: Create" + "create:temporalnode" + "TemporalNode: Create" + "create:temporalnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the TEMPORAL relationship." + RemoveTemporalNodeTemporalNodes( + from: _TemporalNodeInput! + to: _TemporalNodeInput! + ): _RemoveTemporalNodeTemporalNodesPayload + @MutationMeta( + relationship: "TEMPORAL" + from: "TemporalNode" + to: "TemporalNode" + ) + @hasScope( + scopes: [ + "TemporalNode: Delete" + "delete:temporalnode" + "TemporalNode: Delete" + "delete:temporalnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the TEMPORAL relationship." + MergeTemporalNodeTemporalNodes( + from: _TemporalNodeInput! + to: _TemporalNodeInput! + ): _MergeTemporalNodeTemporalNodesPayload + @MutationMeta( + relationship: "TEMPORAL" + from: "TemporalNode" + to: "TemporalNode" + ) + @hasScope( + scopes: [ + "TemporalNode: Merge" + "merge:temporalnode" + "TemporalNode: Merge" + "merge:temporalnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a TemporalNode node." + CreateTemporalNode( + datetime: _Neo4jDateTimeInput + name: String + time: _Neo4jTimeInput + date: _Neo4jDateInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetimes: [_Neo4jLocalDateTimeInput] + ): TemporalNode + @hasScope(scopes: ["TemporalNode: Create", "create:temporalnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a TemporalNode node." + UpdateTemporalNode( + datetime: _Neo4jDateTimeInput + name: String! + time: _Neo4jTimeInput + date: _Neo4jDateInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetimes: [_Neo4jLocalDateTimeInput] + ): TemporalNode + @hasScope(scopes: ["TemporalNode: Update", "update:temporalnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a TemporalNode node." + DeleteTemporalNode(name: String!): TemporalNode + @hasScope(scopes: ["TemporalNode: Delete", "delete:temporalnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a TemporalNode node." + MergeTemporalNode( + datetime: _Neo4jDateTimeInput + name: String! + time: _Neo4jTimeInput + date: _Neo4jDateInput + localtime: _Neo4jLocalTimeInput + localdatetime: _Neo4jLocalDateTimeInput + localdatetimes: [_Neo4jLocalDateTimeInput] + ): TemporalNode + @hasScope(scopes: ["TemporalNode: Merge", "merge:temporalnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the SPATIAL relationship." + AddSpatialNodeSpatialNodes( + from: _SpatialNodeInput! + to: _SpatialNodeInput! + ): _AddSpatialNodeSpatialNodesPayload + @MutationMeta( + relationship: "SPATIAL" + from: "SpatialNode" + to: "SpatialNode" + ) + @hasScope( + scopes: [ + "SpatialNode: Create" + "create:spatialnode" + "SpatialNode: Create" + "create:spatialnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the SPATIAL relationship." + RemoveSpatialNodeSpatialNodes( + from: _SpatialNodeInput! + to: _SpatialNodeInput! + ): _RemoveSpatialNodeSpatialNodesPayload + @MutationMeta( + relationship: "SPATIAL" + from: "SpatialNode" + to: "SpatialNode" + ) + @hasScope( + scopes: [ + "SpatialNode: Delete" + "delete:spatialnode" + "SpatialNode: Delete" + "delete:spatialnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the SPATIAL relationship." + MergeSpatialNodeSpatialNodes( + from: _SpatialNodeInput! + to: _SpatialNodeInput! + ): _MergeSpatialNodeSpatialNodesPayload + @MutationMeta( + relationship: "SPATIAL" + from: "SpatialNode" + to: "SpatialNode" + ) + @hasScope( + scopes: [ + "SpatialNode: Merge" + "merge:spatialnode" + "SpatialNode: Merge" + "merge:spatialnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a SpatialNode node." + CreateSpatialNode(id: ID, point: _Neo4jPointInput): SpatialNode + @hasScope(scopes: ["SpatialNode: Create", "create:spatialnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a SpatialNode node." + UpdateSpatialNode(id: ID!, point: _Neo4jPointInput): SpatialNode + @hasScope(scopes: ["SpatialNode: Update", "update:spatialnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a SpatialNode node." + DeleteSpatialNode(id: ID!): SpatialNode + @hasScope(scopes: ["SpatialNode: Delete", "delete:spatialnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a SpatialNode node." + MergeSpatialNode(id: ID!, point: _Neo4jPointInput): SpatialNode + @hasScope(scopes: ["SpatialNode: Merge", "merge:spatialnode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the FILMED_IN relationship." + AddCasedTypeState( + from: _CasedTypeInput! + to: _StateInput! + ): _AddCasedTypeStatePayload + @MutationMeta(relationship: "FILMED_IN", from: "CasedType", to: "State") + @hasScope( + scopes: [ + "CasedType: Create" + "create:casedtype" + "State: Create" + "create:state" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the FILMED_IN relationship." + RemoveCasedTypeState( + from: _CasedTypeInput! + to: _StateInput! + ): _RemoveCasedTypeStatePayload + @MutationMeta(relationship: "FILMED_IN", from: "CasedType", to: "State") + @hasScope( + scopes: [ + "CasedType: Delete" + "delete:casedtype" + "State: Delete" + "delete:state" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the FILMED_IN relationship." + MergeCasedTypeState( + from: _CasedTypeInput! + to: _StateInput! + ): _MergeCasedTypeStatePayload + @MutationMeta(relationship: "FILMED_IN", from: "CasedType", to: "State") + @hasScope( + scopes: [ + "CasedType: Merge" + "merge:casedtype" + "State: Merge" + "merge:state" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a CasedType node." + CreateCasedType(name: String): CasedType + @hasScope(scopes: ["CasedType: Create", "create:casedtype"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a CasedType node." + DeleteCasedType(name: String!): CasedType + @hasScope(scopes: ["CasedType: Delete", "delete:casedtype"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a CasedType node." + MergeCasedType(name: String!): CasedType + @hasScope(scopes: ["CasedType: Merge", "merge:casedtype"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the cameras relationship." + AddCameraOperators( + from: _PersonInput! + to: _CameraInput! + ): _AddCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "Camera") + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Camera: Create" + "create:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the cameras relationship." + RemoveCameraOperators( + from: _PersonInput! + to: _CameraInput! + ): _RemoveCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "Camera") + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Camera: Delete" + "delete:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the cameras relationship." + MergeCameraOperators( + from: _PersonInput! + to: _CameraInput! + ): _MergeCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "Camera") + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Camera: Merge" + "merge:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + AddCameraReflexiveInterfaceRelationship( + from: _CameraInput! + to: _CameraInput! + ): _AddCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "Camera" + to: "Camera" + ) + @hasScope( + scopes: [ + "Camera: Create" + "create:camera" + "Camera: Create" + "create:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + RemoveCameraReflexiveInterfaceRelationship( + from: _CameraInput! + to: _CameraInput! + ): _RemoveCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "Camera" + to: "Camera" + ) + @hasScope( + scopes: [ + "Camera: Delete" + "delete:camera" + "Camera: Delete" + "delete:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + MergeCameraReflexiveInterfaceRelationship( + from: _CameraInput! + to: _CameraInput! + ): _MergeCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "Camera" + to: "Camera" + ) + @hasScope( + scopes: [ + "Camera: Merge" + "merge:camera" + "Camera: Merge" + "merge:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the cameras relationship." + AddOldCameraOperators( + from: _PersonInput! + to: _OldCameraInput! + ): _AddOldCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "OldCamera") + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "OldCamera: Create" + "create:oldcamera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the cameras relationship." + RemoveOldCameraOperators( + from: _PersonInput! + to: _OldCameraInput! + ): _RemoveOldCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "OldCamera") + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "OldCamera: Delete" + "delete:oldcamera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the cameras relationship." + MergeOldCameraOperators( + from: _PersonInput! + to: _OldCameraInput! + ): _MergeOldCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "OldCamera") + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "OldCamera: Merge" + "merge:oldcamera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + AddOldCameraReflexiveInterfaceRelationship( + from: _OldCameraInput! + to: _CameraInput! + ): _AddOldCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "OldCamera" + to: "Camera" + ) + @hasScope( + scopes: [ + "OldCamera: Create" + "create:oldcamera" + "Camera: Create" + "create:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + RemoveOldCameraReflexiveInterfaceRelationship( + from: _OldCameraInput! + to: _CameraInput! + ): _RemoveOldCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "OldCamera" + to: "Camera" + ) + @hasScope( + scopes: [ + "OldCamera: Delete" + "delete:oldcamera" + "Camera: Delete" + "delete:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + MergeOldCameraReflexiveInterfaceRelationship( + from: _OldCameraInput! + to: _CameraInput! + ): _MergeOldCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "OldCamera" + to: "Camera" + ) + @hasScope( + scopes: [ + "OldCamera: Merge" + "merge:oldcamera" + "Camera: Merge" + "merge:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a OldCamera node." + CreateOldCamera( + type: String + id: ID + make: String + weight: Int + smell: String + ): OldCamera @hasScope(scopes: ["OldCamera: Create", "create:oldcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a OldCamera node." + UpdateOldCamera( + type: String + id: ID! + make: String + weight: Int + smell: String + ): OldCamera @hasScope(scopes: ["OldCamera: Update", "update:oldcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a OldCamera node." + DeleteOldCamera(id: ID!): OldCamera + @hasScope(scopes: ["OldCamera: Delete", "delete:oldcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a OldCamera node." + MergeOldCamera( + type: String + id: ID! + make: String + weight: Int + smell: String + ): OldCamera @hasScope(scopes: ["OldCamera: Merge", "merge:oldcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the cameras relationship." + AddNewCameraOperators( + from: _PersonInput! + to: _NewCameraInput! + ): _AddNewCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "NewCamera") + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "NewCamera: Create" + "create:newcamera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the cameras relationship." + RemoveNewCameraOperators( + from: _PersonInput! + to: _NewCameraInput! + ): _RemoveNewCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "NewCamera") + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "NewCamera: Delete" + "delete:newcamera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the cameras relationship." + MergeNewCameraOperators( + from: _PersonInput! + to: _NewCameraInput! + ): _MergeNewCameraOperatorsPayload + @MutationMeta(relationship: "cameras", from: "Person", to: "NewCamera") + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "NewCamera: Merge" + "merge:newcamera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + AddNewCameraReflexiveInterfaceRelationship( + from: _NewCameraInput! + to: _CameraInput! + ): _AddNewCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "NewCamera" + to: "Camera" + ) + @hasScope( + scopes: [ + "NewCamera: Create" + "create:newcamera" + "Camera: Create" + "create:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + RemoveNewCameraReflexiveInterfaceRelationship( + from: _NewCameraInput! + to: _CameraInput! + ): _RemoveNewCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "NewCamera" + to: "Camera" + ) + @hasScope( + scopes: [ + "NewCamera: Delete" + "delete:newcamera" + "Camera: Delete" + "delete:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACE_RELATIONSHIP relationship." + MergeNewCameraReflexiveInterfaceRelationship( + from: _NewCameraInput! + to: _CameraInput! + ): _MergeNewCameraReflexiveInterfaceRelationshipPayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACE_RELATIONSHIP" + from: "NewCamera" + to: "Camera" + ) + @hasScope( + scopes: [ + "NewCamera: Merge" + "merge:newcamera" + "Camera: Merge" + "merge:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a NewCamera node." + CreateNewCamera( + type: String + id: ID + make: String + weight: Int + features: [String] + ): NewCamera @hasScope(scopes: ["NewCamera: Create", "create:newcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a NewCamera node." + UpdateNewCamera( + type: String + id: ID! + make: String + weight: Int + features: [String] + ): NewCamera @hasScope(scopes: ["NewCamera: Update", "update:newcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a NewCamera node." + DeleteNewCamera(id: ID!): NewCamera + @hasScope(scopes: ["NewCamera: Delete", "delete:newcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a NewCamera node." + MergeNewCamera( + type: String + id: ID! + make: String + weight: Int + features: [String] + ): NewCamera @hasScope(scopes: ["NewCamera: Merge", "merge:newcamera"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the favoriteCamera relationship." + AddCameraManFavoriteCamera( + from: _CameraManInput! + to: _CameraInput! + ): _AddCameraManFavoriteCameraPayload + @MutationMeta( + relationship: "favoriteCamera" + from: "CameraMan" + to: "Camera" + ) + @hasScope( + scopes: [ + "CameraMan: Create" + "create:cameraman" + "Camera: Create" + "create:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the favoriteCamera relationship." + RemoveCameraManFavoriteCamera( + from: _CameraManInput! + to: _CameraInput! + ): _RemoveCameraManFavoriteCameraPayload + @MutationMeta( + relationship: "favoriteCamera" + from: "CameraMan" + to: "Camera" + ) + @hasScope( + scopes: [ + "CameraMan: Delete" + "delete:cameraman" + "Camera: Delete" + "delete:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the favoriteCamera relationship." + MergeCameraManFavoriteCamera( + from: _CameraManInput! + to: _CameraInput! + ): _MergeCameraManFavoriteCameraPayload + @MutationMeta( + relationship: "favoriteCamera" + from: "CameraMan" + to: "Camera" + ) + @hasScope( + scopes: [ + "CameraMan: Merge" + "merge:cameraman" + "Camera: Merge" + "merge:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the cameras relationship." + AddCameraManCameras( + from: _CameraManInput! + to: _CameraInput! + ): _AddCameraManCamerasPayload + @MutationMeta(relationship: "cameras", from: "CameraMan", to: "Camera") + @hasScope( + scopes: [ + "CameraMan: Create" + "create:cameraman" + "Camera: Create" + "create:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the cameras relationship." + RemoveCameraManCameras( + from: _CameraManInput! + to: _CameraInput! + ): _RemoveCameraManCamerasPayload + @MutationMeta(relationship: "cameras", from: "CameraMan", to: "Camera") + @hasScope( + scopes: [ + "CameraMan: Delete" + "delete:cameraman" + "Camera: Delete" + "delete:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the cameras relationship." + MergeCameraManCameras( + from: _CameraManInput! + to: _CameraInput! + ): _MergeCameraManCamerasPayload + @MutationMeta(relationship: "cameras", from: "CameraMan", to: "Camera") + @hasScope( + scopes: [ + "CameraMan: Merge" + "merge:cameraman" + "Camera: Merge" + "merge:camera" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the cameraBuddy relationship." + AddCameraManCameraBuddy( + from: _CameraManInput! + to: _PersonInput! + ): _AddCameraManCameraBuddyPayload + @MutationMeta( + relationship: "cameraBuddy" + from: "CameraMan" + to: "Person" + ) + @hasScope( + scopes: [ + "CameraMan: Create" + "create:cameraman" + "Person: Create" + "create:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the cameraBuddy relationship." + RemoveCameraManCameraBuddy( + from: _CameraManInput! + to: _PersonInput! + ): _RemoveCameraManCameraBuddyPayload + @MutationMeta( + relationship: "cameraBuddy" + from: "CameraMan" + to: "Person" + ) + @hasScope( + scopes: [ + "CameraMan: Delete" + "delete:cameraman" + "Person: Delete" + "delete:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the cameraBuddy relationship." + MergeCameraManCameraBuddy( + from: _CameraManInput! + to: _PersonInput! + ): _MergeCameraManCameraBuddyPayload + @MutationMeta( + relationship: "cameraBuddy" + from: "CameraMan" + to: "Person" + ) + @hasScope( + scopes: [ + "CameraMan: Merge" + "merge:cameraman" + "Person: Merge" + "merge:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + AddCameraManInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _AddCameraManInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Genre: Create" + "create:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveCameraManInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + ): _RemoveCameraManInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Genre: Delete" + "delete:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateCameraManInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _UpdateCameraManInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Genre: Update" + "update:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the INTERFACED_RELATIONSHIP_TYPE relationship." + MergeCameraManInterfacedRelationshipType( + from: _PersonInput! + to: _GenreInput! + data: _InterfacedRelationshipTypeInput! + ): _MergeCameraManInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Genre" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Genre: Merge" + "merge:genre" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + AddCameraManReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _AddCameraManReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Create" + "create:person" + "Person: Create" + "create:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + RemoveCameraManReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + ): _RemoveCameraManReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Delete" + "delete:person" + "Person: Delete" + "delete:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##update-relationship) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + UpdateCameraManReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _UpdateCameraManReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Update" + "update:person" + "Person: Update" + "update:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE relationship." + MergeCameraManReflexiveInterfacedRelationshipType( + from: _PersonInput! + to: _PersonInput! + data: _ReflexiveInterfacedRelationshipTypeInput! + ): _MergeCameraManReflexiveInterfacedRelationshipTypePayload + @MutationMeta( + relationship: "REFLEXIVE_INTERFACED_RELATIONSHIP_TYPE" + from: "Person" + to: "Person" + ) + @hasScope( + scopes: [ + "Person: Merge" + "merge:person" + "Person: Merge" + "merge:person" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a CameraMan node." + CreateCameraMan( + userId: ID + name: String + extensionScalar: String + ): CameraMan @hasScope(scopes: ["CameraMan: Create", "create:cameraman"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a CameraMan node." + UpdateCameraMan( + userId: ID! + name: String + extensionScalar: String + ): CameraMan @hasScope(scopes: ["CameraMan: Update", "update:cameraman"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a CameraMan node." + DeleteCameraMan(userId: ID!): CameraMan + @hasScope(scopes: ["CameraMan: Delete", "delete:cameraman"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a CameraMan node." + MergeCameraMan( + userId: ID! + name: String + extensionScalar: String + ): CameraMan @hasScope(scopes: ["CameraMan: Merge", "merge:cameraman"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the TEST_RELATION relationship." + AddUniqueNodeTestRelation( + from: _UniqueNodeInput! + to: _UniqueStringNodeInput! + ): _AddUniqueNodeTestRelationPayload + @MutationMeta( + relationship: "TEST_RELATION" + from: "UniqueNode" + to: "UniqueStringNode" + ) + @hasScope( + scopes: [ + "UniqueNode: Create" + "create:uniquenode" + "UniqueStringNode: Create" + "create:uniquestringnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the TEST_RELATION relationship." + RemoveUniqueNodeTestRelation( + from: _UniqueNodeInput! + to: _UniqueStringNodeInput! + ): _RemoveUniqueNodeTestRelationPayload + @MutationMeta( + relationship: "TEST_RELATION" + from: "UniqueNode" + to: "UniqueStringNode" + ) + @hasScope( + scopes: [ + "UniqueNode: Delete" + "delete:uniquenode" + "UniqueStringNode: Delete" + "delete:uniquestringnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the TEST_RELATION relationship." + MergeUniqueNodeTestRelation( + from: _UniqueNodeInput! + to: _UniqueStringNodeInput! + ): _MergeUniqueNodeTestRelationPayload + @MutationMeta( + relationship: "TEST_RELATION" + from: "UniqueNode" + to: "UniqueStringNode" + ) + @hasScope( + scopes: [ + "UniqueNode: Merge" + "merge:uniquenode" + "UniqueStringNode: Merge" + "merge:uniquestringnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a UniqueNode node." + CreateUniqueNode(string: String, id: ID, anotherId: ID): UniqueNode + @hasScope(scopes: ["UniqueNode: Create", "create:uniquenode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a UniqueNode node." + UpdateUniqueNode(string: String, id: ID!, anotherId: ID): UniqueNode + @hasScope(scopes: ["UniqueNode: Update", "update:uniquenode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a UniqueNode node." + DeleteUniqueNode(id: ID!): UniqueNode + @hasScope(scopes: ["UniqueNode: Delete", "delete:uniquenode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a UniqueNode node." + MergeUniqueNode(string: String, id: ID!, anotherId: ID): UniqueNode + @hasScope(scopes: ["UniqueNode: Merge", "merge:uniquenode"]) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-relationships) the TEST_RELATION relationship." + AddUniqueStringNodeTestRelation( + from: _UniqueNodeInput! + to: _UniqueStringNodeInput! + ): _AddUniqueStringNodeTestRelationPayload + @MutationMeta( + relationship: "TEST_RELATION" + from: "UniqueNode" + to: "UniqueStringNode" + ) + @hasScope( + scopes: [ + "UniqueNode: Create" + "create:uniquenode" + "UniqueStringNode: Create" + "create:uniquestringnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##add--remove-relationship) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-relationships-only) the TEST_RELATION relationship." + RemoveUniqueStringNodeTestRelation( + from: _UniqueNodeInput! + to: _UniqueStringNodeInput! + ): _RemoveUniqueStringNodeTestRelationPayload + @MutationMeta( + relationship: "TEST_RELATION" + from: "UniqueNode" + to: "UniqueStringNode" ) - since: Int - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - ratings: [String] - datetimes: [_Neo4jDateTime] - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - location: _Neo4jPoint - to: User - } - - type Rated @relation { - from: User - currentUserId(strArg: String): String - @cypher( - statement: "RETURN $cypherParams.currentUserId AS cypherParamsUserId" + @hasScope( + scopes: [ + "UniqueNode: Delete" + "delete:uniquenode" + "UniqueStringNode: Delete" + "delete:uniquestringnode" + ] ) - rating: Int - ratings: [Int] - time: _Neo4jTime - date: _Neo4jDate - datetime: _Neo4jDateTime - localtime: _Neo4jLocalTime - localdatetime: _Neo4jLocalDateTime - datetimes: [_Neo4jDateTime] - location: _Neo4jPoint - _id: String - to: Movie - } - - input _BookInput { - genre: BookGenre! - } - - enum _currentUserIdOrdering { - userId_asc - userId_desc - _id_asc - _id_desc - } - - input _currentUserIdFilter { - AND: [_currentUserIdFilter!] - OR: [_currentUserIdFilter!] - userId: String - userId_not: String - userId_in: [String!] - userId_not_in: [String!] - userId_contains: String - userId_not_contains: String - userId_starts_with: String - userId_not_starts_with: String - userId_ends_with: String - userId_not_ends_with: String - } - - input _currentUserIdInput { - userId: String! - } - - type ignoredType { - ignoredField: String @neo4j_ignore - } - - "Custom scalar type line description" - scalar Time - - scalar Date - - scalar DateTime - - scalar LocalTime - - scalar LocalDateTime - - enum Role { - reader - user - admin - } - - input _OldCameraInput { - id: ID! - } - - type _AddOldCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "OldCamera") { - from: Person - to: OldCamera - } - - type _RemoveOldCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "OldCamera") { - from: Person - to: OldCamera - } - - type _MergeOldCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "OldCamera") { - from: Person - to: OldCamera - } - - type _AddOldCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "OldCamera" - to: "Camera" - ) { - from: OldCamera - to: Camera - } - - type _RemoveOldCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "OldCamera" - to: "Camera" - ) { - from: OldCamera - to: Camera - } - - type _MergeOldCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "OldCamera" - to: "Camera" - ) { - from: OldCamera - to: Camera - } - - input _NewCameraInput { - id: ID! - } - - type _AddNewCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "NewCamera") { - from: Person - to: NewCamera - } - - type _RemoveNewCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "NewCamera") { - from: Person - to: NewCamera - } - - type _MergeNewCameraOperatorsPayload - @relation(name: "cameras", from: "Person", to: "NewCamera") { - from: Person - to: NewCamera - } - - type _AddNewCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "NewCamera" - to: "Camera" - ) { - from: NewCamera - to: Camera - } - - type _RemoveNewCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "NewCamera" - to: "Camera" - ) { - from: NewCamera - to: Camera - } - - type _MergeNewCameraReflexiveInterfaceRelationshipPayload - @relation( - name: "REFLEXIVE_INTERFACE_RELATIONSHIP" - from: "NewCamera" - to: "Camera" - ) { - from: NewCamera - to: Camera - } - - type _Neo4jPoint { - x: Float - y: Float - z: Float - longitude: Float - latitude: Float - height: Float - crs: String - srid: Int - } - - input _Neo4jPointInput { - x: Float - y: Float - z: Float - longitude: Float - latitude: Float - height: Float - crs: String - srid: Int - } - - input _Neo4jPointDistanceFilter { - point: _Neo4jPointInput! - distance: Float! + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/##merge-relationship) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-relationships) the TEST_RELATION relationship." + MergeUniqueStringNodeTestRelation( + from: _UniqueNodeInput! + to: _UniqueStringNodeInput! + ): _MergeUniqueStringNodeTestRelationPayload + @MutationMeta( + relationship: "TEST_RELATION" + from: "UniqueNode" + to: "UniqueStringNode" + ) + @hasScope( + scopes: [ + "UniqueNode: Merge" + "merge:uniquenode" + "UniqueStringNode: Merge" + "merge:uniquestringnode" + ] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#create) for [creating](https://neo4j.com/docs/cypher-manual/4.1/clauses/create/#create-nodes) a UniqueStringNode node." + CreateUniqueStringNode(id: ID!, uniqueString: String): UniqueStringNode + @hasScope( + scopes: ["UniqueStringNode: Create", "create:uniquestringnode"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#update) for [updating](https://neo4j.com/docs/cypher-manual/4.1/clauses/set/#set-update-a-property) a UniqueStringNode node." + UpdateUniqueStringNode(id: ID, uniqueString: String!): UniqueStringNode + @hasScope( + scopes: ["UniqueStringNode: Update", "update:uniquestringnode"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#delete) for [deleting](https://neo4j.com/docs/cypher-manual/4.1/clauses/delete/#delete-delete-single-node) a UniqueStringNode node." + DeleteUniqueStringNode(uniqueString: String!): UniqueStringNode + @hasScope( + scopes: ["UniqueStringNode: Delete", "delete:uniquestringnode"] + ) + "[Generated mutation](https://grandstack.io/docs/graphql-schema-generation-augmentation/#merge) for [merging](https://neo4j.com/docs/cypher-manual/4.1/clauses/merge/#query-merge-node-derived) a UniqueStringNode node." + MergeUniqueStringNode(id: ID, uniqueString: String!): UniqueStringNode + @hasScope(scopes: ["UniqueStringNode: Merge", "merge:uniquestringnode"]) } - enum _RelationDirections { - IN - OUT + type SubscriptionC { + testSubscribe: Boolean } schema { diff --git a/test/unit/configTest.test.js b/test/unit/configTest.test.js index add37749..de1b3ef4 100644 --- a/test/unit/configTest.test.js +++ b/test/unit/configTest.test.js @@ -147,6 +147,9 @@ test.cb( const queryType = ` type Query { + """ + [Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for Tweet type nodes. + """ Tweet(id: ID, timestamp: _Neo4jDateTimeInput, text: String, _id: String, first: Int, offset: Int, orderBy: [_TweetOrdering], filter: _TweetFilter): [Tweet] } `; @@ -169,6 +172,9 @@ test.cb('Config - augmentSchema - specify types to exclude for query', t => { const queryType = ` type Query { + """ + [Generated query](https://grandstack.io/docs/graphql-schema-generation-augmentation#generated-queries) for Tweet type nodes. + """ Tweet(id: ID, timestamp: _Neo4jDateTimeInput, text: String, _id: String, first: Int, offset: Int, orderBy: [_TweetOrdering], filter: _TweetFilter): [Tweet] } `; From 871260b702249096d541bbb25c4f0995a8fdfc3d Mon Sep 17 00:00:00 2001 From: Michael Graham <38390185+michaeldgraham@users.noreply.github.com> Date: Wed, 30 Sep 2020 20:39:55 -0700 Subject: [PATCH 2/3] attempted fix for integration test --- test/integration/integration.test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/integration.test.js b/test/integration/integration.test.js index bd09331c..3c2186f1 100644 --- a/test/integration/integration.test.js +++ b/test/integration/integration.test.js @@ -1296,15 +1296,15 @@ test.serial('query union type using complex fragments', async t => { movieId: '12dd334d5zaaaa', title: 'My Super Awesome Movie' }, - { - __typename: 'OldCamera', - id: 'cam009', - type: 'macro' - }, { userId: 'man009', name: 'Johnnie Zoooooooom', __typename: 'User' + }, + { + __typename: 'OldCamera', + id: 'cam009', + type: 'macro' } ] } From 10590881256bb770502b655d32824fe774d81e39 Mon Sep 17 00:00:00 2001 From: Michael Graham <38390185+michaeldgraham@users.noreply.github.com> Date: Wed, 30 Sep 2020 20:47:27 -0700 Subject: [PATCH 3/3] reversal of failed fix --- test/integration/integration.test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/integration/integration.test.js b/test/integration/integration.test.js index 3c2186f1..bd09331c 100644 --- a/test/integration/integration.test.js +++ b/test/integration/integration.test.js @@ -1296,15 +1296,15 @@ test.serial('query union type using complex fragments', async t => { movieId: '12dd334d5zaaaa', title: 'My Super Awesome Movie' }, - { - userId: 'man009', - name: 'Johnnie Zoooooooom', - __typename: 'User' - }, { __typename: 'OldCamera', id: 'cam009', type: 'macro' + }, + { + userId: 'man009', + name: 'Johnnie Zoooooooom', + __typename: 'User' } ] }