Skip to content

Commit 65baa1d

Browse files
committed
Simplify IQueryStringParameterScopeParser
1 parent 4f1581a commit 65baa1d

File tree

8 files changed

+18
-32
lines changed

8 files changed

+18
-32
lines changed

src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ namespace JsonApiDotNetCore.Queries.Expressions;
88
/// </summary>
99
internal sealed class IncludeChainConverter
1010
{
11+
public static IncludeChainConverter Instance { get; } = new();
12+
13+
private IncludeChainConverter()
14+
{
15+
}
16+
1117
/// <summary>
1218
/// Converts a tree of inclusions into a set of relationship chains.
1319
/// </summary>

src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ namespace JsonApiDotNetCore.Queries.Expressions;
1313
[PublicAPI]
1414
public class IncludeExpression : QueryExpression
1515
{
16-
private static readonly IncludeChainConverter IncludeChainConverter = new();
17-
1816
public static readonly IncludeExpression Empty = new();
1917

2018
/// <summary>
@@ -51,7 +49,7 @@ public override string ToFullString()
5149

5250
private string InnerToString(bool toFullString)
5351
{
54-
IReadOnlyCollection<ResourceFieldChainExpression> chains = IncludeChainConverter.GetRelationshipChains(this);
52+
IReadOnlyCollection<ResourceFieldChainExpression> chains = IncludeChainConverter.Instance.GetRelationshipChains(this);
5553
return string.Join(",", chains.Select(field => toFullString ? field.ToFullString() : field.ToString()).Distinct().OrderBy(name => name));
5654
}
5755

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
using JsonApiDotNetCore.Configuration;
22
using JsonApiDotNetCore.Queries.Expressions;
3-
using JsonApiDotNetCore.QueryStrings.FieldChains;
43

54
namespace JsonApiDotNetCore.Queries.Parsing;
65

76
/// <summary>
8-
/// Parses the JSON:API 'sort' and 'filter' query string parameter names, which contain a resource field chain that indicates the scope its query string
9-
/// parameter value applies to.
7+
/// Parser for the JSON:API 'sort' and 'filter' query string parameter names, which indicate the scope their query string parameter value applies to. The
8+
/// value consists of an optional relationship chain ending in a to-many relationship, surrounded by brackets.
109
/// </summary>
1110
public interface IQueryStringParameterScopeParser
1211
{
@@ -20,11 +19,5 @@ public interface IQueryStringParameterScopeParser
2019
/// <param name="resourceType">
2120
/// The resource type used to lookup JSON:API fields that are referenced in <paramref name="source" />.
2221
/// </param>
23-
/// <param name="pattern">
24-
/// The pattern that the field chain in <paramref name="source" /> must match.
25-
/// </param>
26-
/// <param name="options">
27-
/// The match options for <paramref name="pattern" />.
28-
/// </param>
29-
QueryStringParameterScopeExpression Parse(string source, ResourceType resourceType, FieldChainPattern pattern, FieldChainPatternMatchOptions options);
22+
QueryStringParameterScopeExpression Parse(string source, ResourceType resourceType);
3023
}

src/JsonApiDotNetCore/Queries/Parsing/QueryStringParameterScopeParser.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,22 @@ namespace JsonApiDotNetCore.Queries.Parsing;
1010
public class QueryStringParameterScopeParser : QueryExpressionParser, IQueryStringParameterScopeParser
1111
{
1212
/// <inheritdoc />
13-
public QueryStringParameterScopeExpression Parse(string source, ResourceType resourceType, FieldChainPattern pattern, FieldChainPatternMatchOptions options)
13+
public QueryStringParameterScopeExpression Parse(string source, ResourceType resourceType)
1414
{
1515
ArgumentNullException.ThrowIfNull(resourceType);
16-
ArgumentNullException.ThrowIfNull(pattern);
1716

1817
Tokenize(source);
1918

20-
QueryStringParameterScopeExpression expression = ParseQueryStringParameterScope(resourceType, pattern, options);
19+
QueryStringParameterScopeExpression expression = ParseQueryStringParameterScope(resourceType);
2120

2221
AssertTokenStackIsEmpty();
2322

2423
return expression;
2524
}
2625

27-
protected virtual QueryStringParameterScopeExpression ParseQueryStringParameterScope(ResourceType resourceType, FieldChainPattern pattern,
28-
FieldChainPatternMatchOptions options)
26+
protected virtual QueryStringParameterScopeExpression ParseQueryStringParameterScope(ResourceType resourceType)
2927
{
3028
ArgumentNullException.ThrowIfNull(resourceType);
31-
ArgumentNullException.ThrowIfNull(pattern);
3229

3330
int position = GetNextTokenPositionOrEnd();
3431

@@ -45,7 +42,7 @@ protected virtual QueryStringParameterScopeExpression ParseQueryStringParameterS
4542
{
4643
TokenStack.Pop();
4744

48-
scope = ParseFieldChain(pattern, options, resourceType, null);
45+
scope = ParseFieldChain(BuiltInPatterns.RelationshipChainEndingInToMany, FieldChainPatternMatchOptions.None, resourceType, null);
4946

5047
EatSingleCharacterToken(TokenKind.CloseBracket);
5148
}

src/JsonApiDotNetCore/Queries/QueryableBuilding/IncludeClauseBuilder.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ namespace JsonApiDotNetCore.Queries.QueryableBuilding;
1010
[PublicAPI]
1111
public class IncludeClauseBuilder : QueryClauseBuilder, IIncludeClauseBuilder
1212
{
13-
private static readonly IncludeChainConverter IncludeChainConverter = new();
14-
1513
public virtual Expression ApplyInclude(IncludeExpression include, QueryClauseBuilderContext context)
1614
{
1715
ArgumentNullException.ThrowIfNull(include);
@@ -26,7 +24,7 @@ public override Expression VisitInclude(IncludeExpression expression, QueryClaus
2624

2725
ApplyEagerLoads(context.ResourceType.EagerLoads, null, propertyPaths);
2826

29-
foreach (ResourceFieldChainExpression chain in IncludeChainConverter.GetRelationshipChains(expression))
27+
foreach (ResourceFieldChainExpression chain in IncludeChainConverter.Instance.GetRelationshipChains(expression))
3028
{
3129
ProcessRelationshipChain(chain, propertyPaths);
3230
}

src/JsonApiDotNetCore/QueryStrings/FilterQueryStringParameterReader.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
using JsonApiDotNetCore.Queries;
88
using JsonApiDotNetCore.Queries.Expressions;
99
using JsonApiDotNetCore.Queries.Parsing;
10-
using JsonApiDotNetCore.QueryStrings.FieldChains;
1110
using Microsoft.Extensions.Primitives;
1211

1312
namespace JsonApiDotNetCore.QueryStrings;
@@ -115,8 +114,7 @@ private void ReadSingleValue(string parameterName, string parameterValue)
115114

116115
private ResourceFieldChainExpression? GetScope(string parameterName)
117116
{
118-
QueryStringParameterScopeExpression parameterScope = _scopeParser.Parse(parameterName, RequestResourceType,
119-
BuiltInPatterns.RelationshipChainEndingInToMany, FieldChainPatternMatchOptions.None);
117+
QueryStringParameterScopeExpression parameterScope = _scopeParser.Parse(parameterName, RequestResourceType);
120118

121119
if (parameterScope.Scope == null)
122120
{

src/JsonApiDotNetCore/QueryStrings/SortQueryStringParameterReader.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
using JsonApiDotNetCore.Queries;
77
using JsonApiDotNetCore.Queries.Expressions;
88
using JsonApiDotNetCore.Queries.Parsing;
9-
using JsonApiDotNetCore.QueryStrings.FieldChains;
109
using Microsoft.Extensions.Primitives;
1110

1211
namespace JsonApiDotNetCore.QueryStrings;
@@ -72,8 +71,7 @@ public virtual void Read(string parameterName, StringValues parameterValue)
7271

7372
private ResourceFieldChainExpression? GetScope(string parameterName)
7473
{
75-
QueryStringParameterScopeExpression parameterScope = _scopeParser.Parse(parameterName, RequestResourceType,
76-
BuiltInPatterns.RelationshipChainEndingInToMany, FieldChainPatternMatchOptions.None);
74+
QueryStringParameterScopeExpression parameterScope = _scopeParser.Parse(parameterName, RequestResourceType);
7775

7876
if (parameterScope.Scope == null)
7977
{

test/JsonApiDotNetCoreTests/UnitTests/Queries/QueryExpressionRewriterTests.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using JsonApiDotNetCore.Configuration;
55
using JsonApiDotNetCore.Queries.Expressions;
66
using JsonApiDotNetCore.Queries.Parsing;
7-
using JsonApiDotNetCore.QueryStrings.FieldChains;
87
using JsonApiDotNetCore.Resources;
98
using JsonApiDotNetCoreTests.IntegrationTests.QueryStrings;
109
using Microsoft.Extensions.Logging.Abstractions;
@@ -198,8 +197,7 @@ public void VisitParameterScope(string expressionText, string expectedTypes)
198197
var parser = new QueryStringParameterScopeParser();
199198
ResourceType blogType = ResourceGraph.GetResourceType<Blog>();
200199

201-
QueryExpression expression =
202-
parser.Parse(expressionText, blogType, BuiltInPatterns.RelationshipChainEndingInToMany, FieldChainPatternMatchOptions.None);
200+
QueryExpression expression = parser.Parse(expressionText, blogType);
203201

204202
var rewriter = new TestableQueryExpressionRewriter();
205203

0 commit comments

Comments
 (0)