GraphQLBundle icon indicating copy to clipboard operation
GraphQLBundle copied to clipboard

Callbacks enhancement

Open mcg-web opened this issue 4 years ago • 0 comments

Q A
Bug fix? no
New feature? yes
BC breaks? no
Deprecations? no (at least for now)
Tests pass? yes
Documented? todo
Fixed tickets #708
License MIT

This PR is a proposal of how we could move forward for making expression language optional and simplifying config callbacks.

before:

Query:
    type: object
    config:
        fields:
            user:
                type: User
                resolve: '@=query("query")'

User:
    type: object
    config:
        fields:
            name:
                type: String
                description: "the user name"
            friends:
                type: friendConnection
                argsBuilder: "Relay::Connection"
                resolve: '@=query("friends", value, args)'
            friendsForward:
                type: userConnection
                argsBuilder: "Relay::ForwardConnection"
                resolve: '@=resolver("friends", [value, args])'
            friendsBackward:
                type: userConnection
                argsBuilder: "Relay::BackwardConnection"
                resolve: '@=resolver("friends", [value, args])'

friendConnection:
    type: relay-connection
    config:
        nodeType: User
        resolveNode: '@=query("node", value)'
        edgeFields:
            friendshipTime:
                type: String
                resolve: "Yesterday"
        connectionFields:
            totalCount:
                type: Int
                resolve: '@=query("connection")'

userConnection:
    type: relay-connection
    config:
        nodeType: User
        resolveNode: '@=query("node", value)'

after:

Query:
    type: object
    config:
        fields:
            user:
                type: User
                resolver: 'Overblog\GraphQLBundle\Tests\Functional\App\Resolver\ConnectionResolver::resolveQuery'

User:
    type: object
    config:
        fields:
            name:
                type: String
                description: "the user name"
            friends:
                type: friendConnection
                argsBuilder: "Relay::Connection"
                resolver:
                    method: 'overblog_graphql.test.resolver.node::friendsResolver'
            friendsForward:
                type: userConnection
                argsBuilder: "Relay::ForwardConnection"
                resolver:
                    id: 'overblog_graphql.test.resolver.node'
                    method: 'friendsResolver'
            friendsBackward:
                type: userConnection
                argsBuilder: "Relay::BackwardConnection"
                resolver: 'overblog_graphql.test.resolver.node::friendsResolver'

friendConnection:
    type: relay-connection
    config:
        nodeType: User
        resolveNode: '@=query("node", value)'
        edgeFields:
            friendshipTime:
                type: String
                resolver: 
                    expression: "'Yesterday'"
        connectionFields:
            totalCount:
                type: Int
                resolver: '@=query("connection")'

mcg-web avatar May 20 '21 07:05 mcg-web