using PoweredSoft.DynamicQuery.Core; using System.Collections.Generic; using System.Linq; namespace PoweredSoft.CQRS.GraphQL.DynamicQuery { public class GraphQLDynamicQueryExecutionResult : GraphQLDynamicQueryResult { public List> Groups { get; set; } public long TotalRecords { get; set; } public long? NumberOfPages { get; set; } public void FromResult(IQueryExecutionResult queryResult) { TotalRecords = queryResult.TotalRecords; NumberOfPages = queryResult.NumberOfPages; if (queryResult.Aggregates != null) Aggregates = queryResult.Aggregates.Select(ConvertAggregateResult).ToList(); if (queryResult.Data != null) Data = queryResult.Data; if (queryResult is IQueryExecutionGroupResult groupedResult) Groups = groupedResult.Groups.Select(ConvertGroupResult).ToList(); } protected virtual GraphQLDynamicQueryGroupResult ConvertGroupResult(IGroupQueryResult arg) { var group = new GraphQLDynamicQueryGroupResult(); group.GroupPath = arg.GroupPath; group.GroupValue = new GraphQLVariantResult(arg.GroupValue); if (arg.Data != null) group.Data = arg.Data; if (arg.Aggregates != null) group.Aggregates = arg.Aggregates.Select(ConvertAggregateResult).ToList(); if (arg.HasSubGroups) group.SubGroups = arg.SubGroups.Select(ConvertGroupResult).ToList(); return group; } protected virtual GraphQLAggregateResult ConvertAggregateResult(IAggregateResult arg) { return new GraphQLAggregateResult { Path = arg.Path, Type = arg.Type, Value = new GraphQLVariantResult(arg.Value) }; } } }