Class ConnectionsManager

The connections fields resolver class.

Handles one to one and zero to many connections, both direct and inverse.

  • One to one connection handling is pretty much straightforward. The SingleConnectedVertexLoader service is used to merge multiple graph database queries.

  • For zero to many connections an interim VirtualConnection object is introduced. No Gremlin queries are executed for retrieving the virtual connection object, and it does not contain any data; instead, it simply proxies all arguments required for retrieving data by child totalCount, pageInfo and edges fields resolvers which are only executed if the client have queried the corresponding fields.

Mermaid

One to one connection handling

%%{init:{"theme":"dark"}}%% sequenceDiagram actor User participant GraphQL server participant ConnectionsManager participant SingleConnectedVertexLoader User->>GraphQL server: GraphQL query of entity's one to one connection GraphQL server->>ConnectionsManager: Execute resolver activate ConnectionsManager ConnectionsManager->>SingleConnectedVertexLoader: Fetch connected vertex via DataLoader SingleConnectedVertexLoader->>ConnectionsManager: The vertex deactivate ConnectionsManager ConnectionsManager->>GraphQL server: Connected vertex value GraphQL server->>User: GraphQL response
%%{init:{"theme":"default"}}%% sequenceDiagram actor User participant GraphQL server participant ConnectionsManager participant SingleConnectedVertexLoader User->>GraphQL server: GraphQL query of entity's one to one connection GraphQL server->>ConnectionsManager: Execute resolver activate ConnectionsManager ConnectionsManager->>SingleConnectedVertexLoader: Fetch connected vertex via DataLoader SingleConnectedVertexLoader->>ConnectionsManager: The vertex deactivate ConnectionsManager ConnectionsManager->>GraphQL server: Connected vertex value GraphQL server->>User: GraphQL response
sequenceDiagram
    actor User
    participant GraphQL server
    participant ConnectionsManager
    participant SingleConnectedVertexLoader
    User->>GraphQL server: GraphQL query of entity's one to one connection
    GraphQL server->>ConnectionsManager: Execute resolver
    activate ConnectionsManager
    ConnectionsManager->>SingleConnectedVertexLoader: Fetch connected vertex via DataLoader
    SingleConnectedVertexLoader->>ConnectionsManager: The vertex
    deactivate ConnectionsManager
    ConnectionsManager->>GraphQL server: Connected vertex value
    GraphQL server->>User: GraphQL response

Mermaid

Zero to many connection handling

%%{init:{"theme":"dark"}}%% sequenceDiagram actor User participant GraphQL server participant ConnectionsManager participant DataLoader User->>GraphQL server: GraphQL query of entity's zero to many connections activate ConnectionsManager GraphQL server->>ConnectionsManager: Retrieve virtual connection object ConnectionsManager->>GraphQL server: Virtual connection object opt totalCount is queried GraphQL server->>ConnectionsManager: Execute
%%{init:{"theme":"default"}}%% sequenceDiagram actor User participant GraphQL server participant ConnectionsManager participant DataLoader User->>GraphQL server: GraphQL query of entity's zero to many connections activate ConnectionsManager GraphQL server->>ConnectionsManager: Retrieve virtual connection object ConnectionsManager->>GraphQL server: Virtual connection object opt totalCount is queried GraphQL server->>ConnectionsManager: Execute
sequenceDiagram
    actor User
    participant GraphQL server
    participant ConnectionsManager
    participant DataLoader
    User->>GraphQL server: GraphQL query of entity's zero to many connections
    activate ConnectionsManager
    GraphQL server->>ConnectionsManager: Retrieve virtual connection object
    ConnectionsManager->>GraphQL server: Virtual connection object
    opt totalCount is queried
        GraphQL server->>ConnectionsManager: Execute
`totalCount` resolver ConnectionsManager->>DataLoader: Retrieve vertices total count DataLoader->>ConnectionsManager: Vertices count ConnectionsManager->>GraphQL server: `totalCount` field value end opt either one or both pageInfo or edges are queried GraphQL server->>ConnectionsManager: Execute pageInfo/edges resolver ConnectionsManager->>DataLoader: Retrieve list of edges Note left of DataLoader: Same DataLoader / Graph database query instance DataLoader->>ConnectionsManager: Edges list ConnectionsManager->>GraphQL server: pageInfo/edges field value end deactivate ConnectionsManager ConnectionsManager->>GraphQL server: Queried connection fields GraphQL server->>User: GraphQL response

Hierarchy

  • ConnectionsManager

Implements

Constructors

Properties

_schemaManager: SchemaManager
_zeroToManyRelationCountLoader: ZeroToManyRelationCountLoader

Methods

  • Registers direct connection resolver for a given vertex type and edge definition.

    Parameters

    • vertexTypeName: string

      The vertex type name.

    • edge: QueryConnector

      The edge definition.

    • resolvers: IResolvers<any, any, Record<string, any>, any>

      GraphQL resolvers object.

    Returns void

  • Registers inverse connection resolver for a given vertex type and edge definition.

    Parameters

    • edge: QueryConnector

      The edge definition.

    • vertexTypeName: string

      The vertex type name.

    • resolvers: IResolvers<any, any, Record<string, any>, any>

      GraphQL resolvers object.

    Returns void

  • Returns a one to one connection query resolver callback for a given entity type.

    Parameters

    • edge: QueryConnector

      The edge definition.

    • inverse: boolean

      Whether to query inverse connections.

    Returns OneToOneConnectionResolver

  • Returns a virtual connection query resolver callback for a given entity type.

    Unlike resolver returned by getOneToOneConnectionFieldResolver, the resolver here doesn't make any queries or return any data. Instead, it returns an object containing all info required by child resolvers.

    This approach is more efficient since it allow running only specific queries required for fetching data; e.g. it won't execute totalCount queries if it's not necessary.

    Parameters

    • resolverArguments: VirtualConnectionResolverArguments

      An object containing parameters used by child resolvers.

    Returns VirtualConnectionResolver

  • Registers direct zeroToMany connection resolver for a given vertex type and edge definition.

    Parameters

    • vertexTypeName: string

      The vertex type name.

    • edge: QueryConnector

      The edge definition.

    • resolvers: IResolvers<any, any, Record<string, any>, any>

      GraphQL resolvers object.

    Returns void

  • Registers direct zeroToOne connection resolver for a given vertex type and edge definition.

    Parameters

    • vertexTypeName: string

      The vertex type name.

    • edge: QueryConnector

      The edge definition.

    • resolvers: IResolvers<any, any, Record<string, any>, any>

      GraphQL resolvers object.

    Returns void

  • Registers inverse one to one connection resolver for a given vertex type and edge definition.

    Parameters

    • vertexTypeName: string

      The vertex type name.

    • edge: QueryConnectorWithInverseRelationship

      The edge definition.

    • resolvers: IResolvers<any, any, Record<string, any>, any>

      GraphQL resolvers object.

    Returns void

  • Registers inverse zero to many connection resolver for a given vertex type and edge definition.

    Parameters

    • vertexTypeName: string

      The vertex type name.

    • edge: QueryConnectorWithInverseRelationship

      The edge definition.

    • resolvers: IResolvers<any, any, Record<string, any>, any>

      GraphQL resolvers object.

    Returns void

Generated using TypeDoc