using System.Linq; using GraphQL.Types; using Wabbajack.BuildServer.Model.Models; namespace Wabbajack.BuildServer.GraphQL { public class Query : ObjectGraphType { public Query(SqlService sql) { FieldAsync>("modLists", arguments: new QueryArguments(new QueryArgument { Name = "filter", Description = "Filter lists to those that only have these archive classifications" }), resolve: async context => { var arg = context.GetArgument("filter"); var lists = await sql.GetDetailedModlistStatuses(); switch (arg) { case "FAILED": return lists.Where(l => l.HasFailures); case "PASSED": return lists.Where(l => !l.HasFailures); default: return lists; } }); FieldAsync>("dailyUniqueMetrics", arguments: new QueryArguments( new QueryArgument {Name = "metric_type", Description = "The grouping of metric data to query"} ), resolve: async context => { var group = context.GetArgument("metric_type"); var data = (await sql.MetricsReport(group)) .GroupBy(m => m.Subject) .Select(g => new MetricResult { SeriesName = g.Key, Labels = g.Select(m => m.Date.ToString()).ToList(), Values = g.Select(m => m.Count).ToList() }); return data; }); } } }