subql icon indicating copy to clipboard operation
subql copied to clipboard

Expose more of the schema in gql subscriptions

Open IcanDivideBy0 opened this issue 1 year ago • 4 comments

Prerequisites

  • [x] Are you running the latest version(s)?
  • [x] Have you searched the documentation for your issue?
  • [x] Did you search for an existing issue or pull request?

Description

GraphQL subscriptions payload doesn't allow to traverse the data graph

Details

Currently, subscriptions payload only contains an id, mutation_type and _entity, the latest being a JSON field. This makes it hard to manage data on the client side and get full advantage of the apollo cache: apollo can't update the cached data automatically because of the missing __typename in _entity and we have no way to fetch relations as well. A more useful approach would be to have different payload types depending on the subscription, allowing to query deeper the entity being inserted/updated/deleted. Another solution might be to expose the said entity under the Nodeinterface: this way the payload type is still the same for all subscriptions, but we can query the actual data & resolvers through a fragment inside the node. Both way, apollo client cache would be correctly updated just by receiving the subscription, eliminating a lot of glue code and refetches on the client side (specially when working with paginated data)

IcanDivideBy0 avatar Nov 13 '24 18:11 IcanDivideBy0

Its not a complete solution but this PR makes the entity type correct and it will now provide the __typename https://github.com/subquery/subql/pull/2600

stwiname avatar Nov 25 '24 03:11 stwiname

Thank you ! The PR already makes it really easier to manage updates for simple cases, I'm leaving this open since from what i see nested data are always set to null but definitely a great improvement 🎉

IcanDivideBy0 avatar Nov 25 '24 11:11 IcanDivideBy0

Also the switch to graphql-ws & graphiql is greatly appreciated 🙌

IcanDivideBy0 avatar Nov 25 '24 11:11 IcanDivideBy0

Also, it looks like entity fields with a camelCase name are always null :/

IcanDivideBy0 avatar Nov 25 '24 15:11 IcanDivideBy0