diff --git a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java index 0d51aa71..c908007d 100644 --- a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java +++ b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/DefaultExploreRequestBuilder.java @@ -80,15 +80,6 @@ public Single build( .map(this.scopeStringTranslator::fromExternal) .orElseThrow(); - return this.build(requestContext, explorerScope, arguments, selectionSet); - } - - private Single build( - GraphQlRequestContext requestContext, - String explorerScope, - Map arguments, - DataFetchingFieldSelectionSet selectionSet) { - int limit = this.argumentDeserializer .deserializePrimitive(arguments, LimitArgument.class) @@ -120,9 +111,6 @@ private Single build( Optional spaceId = this.argumentDeserializer.deserializePrimitive(arguments, SpaceArgument.class); - Set groupByExpressions = - groupBy.map(this::resolveGroupByExpressions).orElseGet(Collections::emptySet); - Optional intervalArgument = this.argumentDeserializer.deserializeObject(arguments, IntervalArgument.class); @@ -134,6 +122,39 @@ private Single build( this.selectionRequestBuilder.getAggregationSelections( requestContext, explorerScope, selectionSet); + return build( + requestContext, + explorerScope, + timeRange, + spaceId, + limit, + offset, + requestedFilters, + requestedOrders, + groupBy, + intervalArgument, + attributeSelections, + aggregationSelections); + } + + @Override + public Single build( + GraphQlRequestContext requestContext, + String explorerScope, + TimeRangeArgument timeRange, + Optional spaceId, + int limit, + int offset, + List requestedFilters, + List requestedOrders, + Optional groupBy, + Optional intervalArgument, + Single> attributeSelections, + Single> aggregationSelections) { + + Set groupByExpressions = + groupBy.map(this::resolveGroupByExpressions).orElseGet(Collections::emptySet); + Single> orderArguments = this.exploreOrderArgumentBuilder.buildList(requestContext, explorerScope, requestedOrders); @@ -151,8 +172,8 @@ private Single build( requestContext, explorerScope, timeRange, - limit, - offset, + limit > 0 ? limit : DEFAULT_LIMIT, + offset >= 0 ? offset : DEFAULT_OFFSET, attributes, aggregations, orders, diff --git a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java index 558c35f1..b5046892 100644 --- a/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java +++ b/hypertrace-graphql-explorer-schema/src/main/java/org/hypertrace/graphql/explorer/request/ExploreRequestBuilder.java @@ -2,12 +2,36 @@ import graphql.schema.DataFetchingFieldSelectionSet; import io.reactivex.rxjava3.core.Single; +import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; +import org.hypertrace.core.graphql.common.request.AttributeRequest; +import org.hypertrace.core.graphql.common.schema.arguments.TimeRangeArgument; +import org.hypertrace.core.graphql.common.schema.results.arguments.filter.FilterArgument; import org.hypertrace.core.graphql.context.GraphQlRequestContext; +import org.hypertrace.graphql.explorer.schema.argument.GroupByArgument; +import org.hypertrace.graphql.explorer.schema.argument.IntervalArgument; +import org.hypertrace.graphql.metric.request.MetricAggregationRequest; +import org.hypertrace.graphql.metric.schema.argument.AggregatableOrderArgument; public interface ExploreRequestBuilder { Single build( GraphQlRequestContext context, Map arguments, DataFetchingFieldSelectionSet selectionSet); + + Single build( + GraphQlRequestContext requestContext, + String explorerScope, + TimeRangeArgument timeRange, + Optional spaceId, + int limit, + int offset, + List requestedFilters, + List requestedOrders, + Optional groupBy, + Optional intervalArgument, + Single> attributeSelections, + Single> aggregationSelections); }