graphql-directive-uid icon indicating copy to clipboard operation
graphql-directive-uid copied to clipboard

Question: Ability to retrieve a UID in a mutation resolver

Open pixeldrew opened this issue 4 years ago • 1 comments

I'm trying to use the uid as a key to mutate data in my resolver, since the uid only lives in the directive and is output via a graphql query i'm having a hard time designing the best way to link the uid back to the data outside of the graph. ie.

const schema = gql`
directive @uid(from: [String]) on OBJECT

type Element @uid(from: ["email", "name"]) {
  name: String!
  email: String!
}

type Query {
  elements: [Element]
}

mutation DeleteElement($uid:String) {
  deleteElement(uid:$uid) : Boolean
}`;

const elements = [{name:"bill", email: "[email protected]"}]
const resolvers = {
  Query: {
    elements: () => elements
  },
  Mutations: {
    deleteElement: (parent, {uid}) => {
      // how am I supposed to find the index in elements without redoing the hash work you do in the resolve function of UniqueIdDirective
   
    }
  }
}

I understand I could redo the work that is done here UniqueId.visitObject()fields[].resolve but this seems like a hack.

Should this uid be used for anything but caching? Is there another way to resolve the uid outside of the graph? Has anyone done something else to resolve this problem?

pixeldrew avatar Sep 07 '19 20:09 pixeldrew

The lib was created mainly for support better caching on the client-side.

You are passing arguments to @uid directive so you can predict the unique.

What we could do is to pass created UUID to the context or root resolver?

czystyl avatar Sep 09 '19 06:09 czystyl