Skip to content

Commit 0ba23dd

Browse files
angrykoalaa-alleMacondoExpress
authored
Create translation (#6488)
* WIP Use new translation layer on create mutations * Add nested create * wip add connect to create * WIP nested connect operation in create * WIP fix create projection * WIP fix projection in create * WIP populatedBy * wip special callback bucket * Rename deprecate old callback bucket * WIP populatedBy callbackBucket * fix list coerce in callbacks * fix expectation of time value in callbacks * populatedBy fields in edge * extend translation of ConnectOperation * fix cypher fields in filters * fix empty filters case on connect * support multiple inputs for create * add auth to create mutations * WIP fix auth in create * auth in create translation * WIP multiple inputs * enable unwind create * remove uncommented code * fix auth in create operation * supports no projection in create * check for graphql errors in tests, separate concrete implementation from composite implementation in create mutation * WIP translation of nested connect with interfaces * Add create-connect-connect to new translation layer * create->connect interfaces * create-> create with interfaces * Improve CreateFactory * Create and connect operations on unions * WIP cleanup createFactory * Update tck tests * cleanup of top level create mutation operation * Fix linting errors * Remove some comments * remove duplicate authorization, console.log from tests, and unreachable code * update tck tests * Add authorization to connect operation * Add tests on create-authorization * Handle after auth in conneciton operations * Code review improvements * Remove unused method from expect relationship * Add more type checks on neo-expect --------- Co-authored-by: a-alle <[email protected]> Co-authored-by: MacondoExpress <[email protected]>
1 parent 56bedcf commit 0ba23dd

File tree

79 files changed

+3606
-3909
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+3606
-3909
lines changed

.changeset/metal-trams-smile.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@neo4j/graphql": patch
3+
---
4+
5+
Fix format of Time and spatial input types

packages/graphql/src/classes/CallbackBucket.ts renamed to packages/graphql/src/classes/CallbackBucketDeprecated.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ type CallbackResult =
5757
| Duration<Integer>
5858
| Array<CallbackResult>;
5959

60-
export class CallbackBucket {
60+
/** @deprecated */
61+
export class CallbackBucketDeprecated {
6162
public callbacks: Callback[];
6263
private context: Neo4jGraphQLTranslationContext;
6364

packages/graphql/src/schema-model/entity/model-adapters/ConcreteEntityAdapter.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,21 @@ export class ConcreteEntityAdapter {
191191
return Array.from(this.attributes.values()).filter((attribute) => attribute.isEventPayloadField());
192192
}
193193

194+
public getPopulatedByFields(operation: "CREATE" | "UPDATE"): AttributeAdapter[] {
195+
switch (operation) {
196+
case "CREATE":
197+
return Array.from(this.attributes.values()).filter((attribute) =>
198+
attribute.populatedByCreateIsGenerated()
199+
);
200+
case "UPDATE":
201+
return Array.from(this.attributes.values()).filter((attribute) =>
202+
attribute.populatedByUpdateIsGenerated()
203+
);
204+
default:
205+
throw new Error("Invalid operation");
206+
}
207+
}
208+
194209
public isSubscribable(schemaModel: Neo4jGraphQLSchemaModel): boolean {
195210
if (this.annotations.subscription) {
196211
return this.annotations.subscription.events?.size > 0;

packages/graphql/src/schema-model/relationship/model-adapters/RelationshipAdapter.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,21 @@ export class RelationshipAdapter {
260260
return Array.from(this.attributes.values()).filter((attribute) => attribute.typeHelper.isTemporal());
261261
}
262262

263+
public getPopulatedByFields(operation: "CREATE" | "UPDATE"): AttributeAdapter[] {
264+
switch (operation) {
265+
case "CREATE":
266+
return Array.from(this.attributes.values()).filter((attribute) =>
267+
attribute.populatedByCreateIsGenerated()
268+
);
269+
case "UPDATE":
270+
return Array.from(this.attributes.values()).filter((attribute) =>
271+
attribute.populatedByUpdateIsGenerated()
272+
);
273+
default:
274+
throw new Error("Invalid operation");
275+
}
276+
}
277+
263278
public get subscriptionConnectedRelationshipFields(): AttributeAdapter[] {
264279
return Array.from(this.attributes.values()).filter((attribute) =>
265280
attribute.isSubscriptionConnectedRelationshipField()

packages/graphql/src/translate/create-connect-and-params.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import type { Node } from "../../src/classes";
2222
import { ContextBuilder } from "../../tests/utils/builders/context-builder";
2323
import { NodeBuilder } from "../../tests/utils/builders/node-builder";
2424
import { SchemaModelBuilder } from "../../tests/utils/builders/schema-model-builder";
25-
import { CallbackBucket } from "../classes/CallbackBucket";
25+
import { CallbackBucketDeprecated } from "../classes/CallbackBucketDeprecated";
2626
import { Neo4jDatabaseInfo } from "../classes/Neo4jDatabaseInfo";
2727
import { RelationshipQueryDirectionOption } from "../constants";
2828
import { defaultNestedOperations } from "../graphql/directives/relationship";
@@ -121,7 +121,7 @@ describe("createConnectAndParams", () => {
121121
context,
122122
refNodes: [node],
123123
parentNode: node,
124-
callbackBucket: new CallbackBucket(context),
124+
callbackBucket: new CallbackBucketDeprecated(context),
125125
source: "CONNECT",
126126
});
127127

packages/graphql/src/translate/create-connect-and-params.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import Cypher from "@neo4j/cypher-builder";
2121
import type { Node, Relationship } from "../classes";
22-
import type { CallbackBucket } from "../classes/CallbackBucket";
22+
import type { CallbackBucketDeprecated } from "../classes/CallbackBucketDeprecated";
2323
import type { EntityAdapter } from "../schema-model/entity/EntityAdapter";
2424
import { InterfaceEntity } from "../schema-model/entity/InterfaceEntity";
2525
import type { ConcreteEntityAdapter } from "../schema-model/entity/model-adapters/ConcreteEntityAdapter";
@@ -70,7 +70,7 @@ function createConnectAndParams({
7070
relationField: RelationField;
7171
parentVar: string;
7272
context: Neo4jGraphQLTranslationContext;
73-
callbackBucket: CallbackBucket;
73+
callbackBucket: CallbackBucketDeprecated;
7474
refNodes: Node[];
7575
labelOverride?: string;
7676
parentNode: Node;

packages/graphql/src/translate/create-create-and-params.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import { ContextBuilder } from "../../tests/utils/builders/context-builder";
2121
import { NodeBuilder } from "../../tests/utils/builders/node-builder";
22-
import { CallbackBucket } from "../classes/CallbackBucket";
22+
import { CallbackBucketDeprecated } from "../classes/CallbackBucketDeprecated";
2323
import { Neo4jGraphQLSchemaModel } from "../schema-model/Neo4jGraphQLSchemaModel";
2424
import { Attribute } from "../schema-model/attribute/Attribute";
2525
import { GraphQLBuiltInScalarType, ScalarType } from "../schema-model/attribute/AttributeType";
@@ -109,7 +109,7 @@ describe("createCreateAndParams", () => {
109109
const result = createCreateAndParams({
110110
input,
111111
node,
112-
callbackBucket: new CallbackBucket(context),
112+
callbackBucket: new CallbackBucketDeprecated(context),
113113
context,
114114
varName: "this0",
115115
withVars: ["this0"],

packages/graphql/src/translate/create-create-and-params.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
import type { Node, Relationship } from "../classes";
21-
import type { CallbackBucket } from "../classes/CallbackBucket";
21+
import type { CallbackBucketDeprecated } from "../classes/CallbackBucketDeprecated";
2222
import type { Neo4jGraphQLTranslationContext } from "../types/neo4j-graphql-translation-context";
2323
import { getRelationshipType } from "../utils/get-relationship-type";
2424
import mapToDbProperty from "../utils/map-to-db-property";
@@ -64,7 +64,7 @@ function createCreateAndParams({
6464
varName: string;
6565
node: Node;
6666
context: Neo4jGraphQLTranslationContext;
67-
callbackBucket: CallbackBucket;
67+
callbackBucket: CallbackBucketDeprecated;
6868
withVars: string[];
6969
topLevelNodeVariable?: string;
7070
//used to build authorization variable in auth subqueries

packages/graphql/src/translate/create-set-relationship-properties.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
*/
1919

2020
import { type Relationship } from "../classes";
21-
import type { CallbackBucket } from "../classes/CallbackBucket";
21+
import type { CallbackBucketDeprecated } from "../classes/CallbackBucketDeprecated";
2222
import type { RelationshipAdapter } from "../schema-model/relationship/model-adapters/RelationshipAdapter";
2323
import { assertNonAmbiguousUpdate } from "./utils/assert-non-ambiguous-update";
2424
import { addCallbackAndSetParam } from "./utils/callback-utils";
@@ -42,7 +42,7 @@ export function createSetRelationshipProperties({
4242
relationship: Relationship;
4343
relationshipAdapter?: RelationshipAdapter;
4444
operation: "CREATE" | "UPDATE";
45-
callbackBucket: CallbackBucket;
45+
callbackBucket: CallbackBucketDeprecated;
4646
parameterPrefix: string;
4747
parameterNotation: "." | "_";
4848
isUpdateOperation?: boolean;
@@ -95,7 +95,7 @@ function createSetRelationshipPropertiesForProperties({
9595
withVars: string[];
9696
relationship: Relationship;
9797
operation: "CREATE" | "UPDATE";
98-
callbackBucket: CallbackBucket;
98+
callbackBucket: CallbackBucketDeprecated;
9999
parameterPrefix: string;
100100
parameterNotation: "." | "_";
101101
isUpdateOperation: boolean;

packages/graphql/src/translate/create-update-and-params.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import { ContextBuilder } from "../../tests/utils/builders/context-builder";
2121
import { NodeBuilder } from "../../tests/utils/builders/node-builder";
22-
import { CallbackBucket } from "../classes/CallbackBucket";
22+
import { CallbackBucketDeprecated } from "../classes/CallbackBucketDeprecated";
2323
import { Neo4jGraphQLSchemaModel } from "../schema-model/Neo4jGraphQLSchemaModel";
2424
import { Attribute } from "../schema-model/attribute/Attribute";
2525
import { GraphQLBuiltInScalarType, ScalarType } from "../schema-model/attribute/AttributeType";
@@ -103,7 +103,7 @@ describe("createUpdateAndParams", () => {
103103
parentVar: "this",
104104
withVars: ["this"],
105105
parameterPrefix: "this",
106-
callbackBucket: new CallbackBucket(context),
106+
callbackBucket: new CallbackBucketDeprecated(context),
107107
});
108108

109109
expect(trimmer(result[0])).toEqual(

0 commit comments

Comments
 (0)