Skip to content

Commit cd8c4e7

Browse files
authored
Simplify arguments (#773)
1 parent 32f8a18 commit cd8c4e7

3 files changed

Lines changed: 29 additions & 32 deletions

File tree

src/GraphQL.EntityFramework/Where/ArgumentProcessor_List.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,40 @@ public static partial class ArgumentProcessor
44
{
55
public static IEnumerable<TItem> ApplyGraphQlArguments<TItem>(this IEnumerable<TItem> items, bool hasId, IResolveFieldContext context)
66
{
7-
object? GetArguments(Type type, string name) => context.GetArgument(type, name);
8-
97
if (hasId)
108
{
11-
if (ArgumentReader.TryReadIds(GetArguments, out var values))
9+
if (ArgumentReader.TryReadIds(context, out var values))
1210
{
1311
var predicate = ExpressionBuilder<TItem>.BuildPredicate("Id", Comparison.In, values);
1412
items = items.Where(predicate.Compile());
1513
}
1614
}
1715

18-
if (ArgumentReader.TryReadWhere(GetArguments, out var wheres))
16+
if (ArgumentReader.TryReadWhere(context, out var wheres))
1917
{
2018
var predicate = ExpressionBuilder<TItem>.BuildPredicate(wheres);
2119
items = items.Where(predicate.Compile());
2220
}
2321

24-
items = Order(items, GetArguments);
22+
items = Order(items, context);
2523

26-
if (ArgumentReader.TryReadSkip(GetArguments, out var skip))
24+
if (ArgumentReader.TryReadSkip(context, out var skip))
2725
{
2826
items = items.Skip(skip);
2927
}
3028

31-
if (ArgumentReader.TryReadTake(GetArguments, out var take))
29+
if (ArgumentReader.TryReadTake(context, out var take))
3230
{
3331
items = items.Take(take);
3432
}
3533

3634
return items;
3735
}
3836

39-
static IEnumerable<TItem> Order<TItem>(IEnumerable<TItem> queryable, Func<Type, string, object?> getArguments)
37+
static IEnumerable<TItem> Order<TItem>(IEnumerable<TItem> queryable, IResolveFieldContext context)
4038
{
4139
var items = queryable.ToList();
42-
var orderBys = ArgumentReader.ReadOrderBy(getArguments).ToList();
40+
var orderBys = ArgumentReader.ReadOrderBy(context).ToList();
4341
IOrderedEnumerable<TItem> ordered;
4442
if (orderBys.Count > 0)
4543
{

src/GraphQL.EntityFramework/Where/ArgumentProcessor_Queryable.cs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,32 @@ public static IQueryable<TItem> ApplyGraphQlArguments<TItem>(
99
bool applyOrder)
1010
where TItem : class
1111
{
12-
object? GetArguments(Type type, string name) => context.GetArgument(type, name);
13-
1412
if (keyNames is not null)
1513
{
16-
if (ArgumentReader.TryReadIds(GetArguments, out var values))
14+
if (ArgumentReader.TryReadIds(context, out var values))
1715
{
1816
var keyName = GetKeyName(keyNames);
1917
var predicate = ExpressionBuilder<TItem>.BuildPredicate(keyName, Comparison.In, values);
2018
queryable = queryable.Where(predicate);
2119
}
2220
}
2321

24-
if (ArgumentReader.TryReadWhere(GetArguments, out var wheres))
22+
if (ArgumentReader.TryReadWhere(context, out var wheres))
2523
{
2624
var predicate = ExpressionBuilder<TItem>.BuildPredicate(wheres);
2725
queryable = queryable.Where(predicate);
2826
}
2927

3028
if (applyOrder)
3129
{
32-
queryable = Order(queryable, GetArguments);
30+
queryable = Order(queryable, context);
3331

34-
if (ArgumentReader.TryReadSkip(GetArguments, out var skip))
32+
if (ArgumentReader.TryReadSkip(context, out var skip))
3533
{
3634
queryable = queryable.Skip(skip);
3735
}
3836

39-
if (ArgumentReader.TryReadTake(GetArguments, out var take))
37+
if (ArgumentReader.TryReadTake(context, out var take))
4038
{
4139
queryable = queryable.Take(take);
4240
}
@@ -55,9 +53,9 @@ static string GetKeyName(List<string> keyNames)
5553
return keyNames[0];
5654
}
5755

58-
static IQueryable<TItem> Order<TItem>(IQueryable<TItem> queryable, Func<Type, string, object?> getArguments)
56+
static IQueryable<TItem> Order<TItem>(IQueryable<TItem> queryable, IResolveFieldContext context)
5957
{
60-
var orderBys = ArgumentReader.ReadOrderBy(getArguments).ToList();
58+
var orderBys = ArgumentReader.ReadOrderBy(context).ToList();
6159
IOrderedQueryable<TItem> ordered;
6260
if (orderBys.Count > 0)
6361
{

src/GraphQL.EntityFramework/Where/ArgumentReader.cs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
static class ArgumentReader
22
{
3-
public static bool TryReadWhere(Func<Type, string, object?> getArgument, out IEnumerable<WhereExpression> expression)
3+
public static bool TryReadWhere(IResolveFieldContext context, out IEnumerable<WhereExpression> expression)
44
{
5-
expression = getArgument.ReadList<WhereExpression>("where");
5+
expression = ReadList<WhereExpression>(context, "where");
66

77
return expression.Any();
88
}
99

10-
public static IEnumerable<OrderBy> ReadOrderBy(Func<Type, string, object?> getArgument) => getArgument.ReadList<OrderBy>("orderBy");
10+
public static IEnumerable<OrderBy> ReadOrderBy(IResolveFieldContext context) =>
11+
ReadList<OrderBy>(context, "orderBy");
1112

12-
public static bool TryReadIds(Func<Type, string, object?> getArgument, [NotNullWhen(true)] out string[]? result)
13+
public static bool TryReadIds(IResolveFieldContext context, [NotNullWhen(true)] out string[]? result)
1314
{
1415
string ArgumentToExpression(object argument)
1516
{
@@ -22,8 +23,8 @@ string ArgumentToExpression(object argument)
2223
};
2324
}
2425

25-
var idsArgument = getArgument(typeof(object), "ids");
26-
var idArgument = getArgument(typeof(object), "id");
26+
var idsArgument = context.GetArgument(typeof(object), "ids");
27+
var idArgument = context.GetArgument(typeof(object), "id");
2728
if (idsArgument is null && idArgument is null)
2829
{
2930
result = null;
@@ -51,9 +52,9 @@ string ArgumentToExpression(object argument)
5152
return true;
5253
}
5354

54-
public static bool TryReadSkip(Func<Type, string, object?> getArgument, out int skip)
55+
public static bool TryReadSkip(IResolveFieldContext context, out int skip)
5556
{
56-
var result = getArgument.TryReadInt("skip", out skip);
57+
var result = TryReadInt("skip", context, out skip);
5758
if (result)
5859
{
5960
if (skip < 0)
@@ -64,9 +65,9 @@ public static bool TryReadSkip(Func<Type, string, object?> getArgument, out int
6465
return result;
6566
}
6667

67-
public static bool TryReadTake(Func<Type, string, object?> getArgument, out int take)
68+
public static bool TryReadTake(IResolveFieldContext context, out int take)
6869
{
69-
var result = getArgument.TryReadInt("take", out take);
70+
var result = TryReadInt("take", context, out take);
7071
if (result)
7172
{
7273
if (take < 0)
@@ -77,9 +78,9 @@ public static bool TryReadTake(Func<Type, string, object?> getArgument, out int
7778
return result;
7879
}
7980

80-
static IEnumerable<T> ReadList<T>(this Func<Type, string, object?> getArgument, string name)
81+
static IEnumerable<T> ReadList<T>(IResolveFieldContext context, string name)
8182
{
82-
var argument = getArgument(typeof(T[]), name);
83+
var argument = context.GetArgument(typeof(T[]), name);
8384
if (argument is null)
8485
{
8586
return Enumerable.Empty<T>();
@@ -88,9 +89,9 @@ static IEnumerable<T> ReadList<T>(this Func<Type, string, object?> getArgument,
8889
return (T[]) argument;
8990
}
9091

91-
static bool TryReadInt(this Func<Type, string, object?> getArgument, string name, out int value)
92+
static bool TryReadInt(string name, IResolveFieldContext context, out int value)
9293
{
93-
var argument = getArgument(typeof(int), name);
94+
var argument = context.GetArgument(typeof(int), name);
9495
if (argument is null)
9596
{
9697
value = 0;

0 commit comments

Comments
 (0)