graphql-spec icon indicating copy to clipboard operation
graphql-spec copied to clipboard

Conditional resolving / optional expanding

Open demsr opened this issue 3 years ago • 0 comments

It would be nice if you could somehow make resolving conditional whether i request subfieds at all:

ExampleData:

vehicleData = [
  {
    licenseplate: "AB-CD123",
    customerNo: "1234"
  },
...
]

customerData = [
  {
    CusteormNo: "1234",
    Name: "John Doe"
  }
]

How it is

schemas:

type vehicle {
  licenseplate: String
  CustomerNo: String
  Customer: Customer
}

type Customer {
  CustomerNo: String
  Name: String
}

Resolver: 

 Vehicle: {
    Customer: ({ CustomerNo }, args, context, info) => {
     return customers.find( x => x.CustomerNo == CustomerNo )
    },
  },
query for vehicle without customer:

query ExampleQuery {
  vehicles{
    licenseplate
    CustomerNo
  }
}

query for vehicle with customer:

query ExampleQuery {
  vehicles{
    licenseplate
    Customer {
      CustomerNo
      Name
    }
  }
}

How i wish it would be

schemas:

type vehicle {
  licenseplate: String
  Customer: String | Customer  <- dynamic fields? 
}

type Customer {
  CustomerNo: String
  Name: String
}

Resolver: 

Vehicle: {
  Customer: ({ Customer }, args, context, info) => {
  if( _noSubfields_ ) return Customer; /* no expensive resolving */
   return customers.find( x => x.Customer== Customer)
  },
},
query for vehicle without customer:

query ExampleQuery {
  vehicles{
    licenseplate
    Customer 
  }
}

query for vehicle with customer:

query ExampleQuery {
  vehicles{
    licenseplate
    Customer {
      CustomerNo
      Name
    }
  }
}

demsr avatar Nov 10 '22 14:11 demsr