graphql-compose-mongoose icon indicating copy to clipboard operation
graphql-compose-mongoose copied to clipboard

Wrap resolver and set a new extended input to it

Open pablo-iParking opened this issue 4 years ago • 2 comments

Hi! I need to wrap a resolver with a new extended one and I need to set a custom input with this wrapper

This is what I've got:

const TypeComposer = composeWithMongoose(myMongooseModel, {});

// I need to use this input with ExtendedQueryResolver wrapper
const ExtendedQueryInput = schemaComposer.createInputTC('
   input extendedQueryInput {
    newField:Boolean,
    filter:FilterFindOneUserInput,
    skip:Int,
    sort:SortFindOneUserInput
  }
');

const ExtendedQueryResolver = (next) => (rp) => {
  const { source, args, context, info, projection } = rp;
  const { filter, skip, sort, newField } = rp.args || {};
  const resultPromise = next(rp);

  // ... do stuff
  // before calling findOne resolver

  return resultPromise.then((payload) => {
    //after calling findOne resolver, payload has the result of findOne
    if (newField) {
      // ... do some other stuff
      // finally chain 'return payload;'
    } else {
      return payload;
    }
  });
};

var query = {};
query['extendedQuery'] = TypeComposer.getResolver('findOne').wrapResolve(
  ExtendedQueryResolver
);

ExtendedQueryInput is the same input that findOne accepts but it has newField that is needed in order to execute some other instructions if true.

How can this extended input be set to the wrapper?

pablo-iParking avatar Jan 19 '21 14:01 pablo-iParking

Possible #275 is relevant

oklas avatar Jan 20 '21 07:01 oklas

Possible #275 is relevant

Thanks @oklas! I'm having a hard time figuring this out, but maybe hooks will help.

pablo-iParking avatar Jan 22 '21 21:01 pablo-iParking