-
Notifications
You must be signed in to change notification settings - Fork 41
Description
Ia m using the microprofile-graphql-client 1.1.0 in my quarkus project and I am struggling with an issue with optional parameter for some quieries.
The used GraphQL API allows to filter catalogue entries with a filter argument. If some filter attributes are applied, then the result is filtered, otherwise no filtering is done.
@Query("catalogues")
List<CatalogueDTO> getCatalogues(
@Header(name = HttpHeaders.AUTHORIZATION) String authorization,
@Header(name = "customer-id") String customerId,
@Name("filter")CatalogueRequestParams catalogueRequestParams
);
@Input("CatalogueRequestParams")
public class CatalogueRequestParams {
FrameType frameType;
Boolean remoteEdgingEnabled;
public Boolean getRemoteEdgingEnabled() {
return remoteEdgingEnabled;
}
public CatalogueRequestParams setRemoteEdgingEnabled(Boolean remoteEdgingEnabled) {
this.remoteEdgingEnabled = remoteEdgingEnabled;
return this;
}
public FrameType getFrameType() {
return frameType;
}
public CatalogueRequestParams setFrameType(FrameType frameType) {
this.frameType = frameType;
return this;
}
}A) If the filter parameter are set, this query will be generated:
{
"query": "query catalogues($filter: CatalogueRequestParams) { catalogues(filter: $filter) {type owner uid} }",
"variables": {
"filter": {
"frameType": "METALL",
"remoteEdgingEnabled": true
}
},
"operationName": "catalogues"
}B) if the parameter are not set, the filter will be set to null.
{
"query": "query catalogues($filter: CatalogueRequestParams) { catalogues(filter: $filter) {type owner uid} }",
"variables": {
"filter": {
"frameType": null,
"remoteEdgingEnabled": null
}
},
"operationName": "catalogues"
}
issue in case A) "remoteEdgingEnabled": true leads to an validation exception on the GraphQL server. if I change it to "remoteEdgingEnabled": "true" the query works.
issue in case B) leads to an validation exception on the GraphQL server. It works only if I remove the filter values completely.
My Questions:
- Do I am facing an issue with the microprofile-graphql-client or is it a issue with the server implementation of the GraphQL API?
- Can I somehow instrument microprofile-graphql-client to "ignore" variables which are set to null? Because in my case, absence of an filter has different meaning as set to null or false.
- Why are the queries generated by microprofile-graphql-client are using "variables". Is it possible to instrument it to generate queries like this:
{
catalogues(filter: {frameType: METAL remoteEdgingEnabled:true} ) {
type,
owner,
uid,
}
}