Skip to content

Commit c0823e0

Browse files
committed
Make query string parameter parsers injectable and extendable
1 parent 9afcc89 commit c0823e0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+551
-188
lines changed

benchmarks/QueryString/QueryStringParserBenchmarks.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using JsonApiDotNetCore;
55
using JsonApiDotNetCore.Configuration;
66
using JsonApiDotNetCore.Middleware;
7+
using JsonApiDotNetCore.Queries.Parsing;
78
using JsonApiDotNetCore.QueryStrings;
89
using JsonApiDotNetCore.QueryStrings.Internal;
910
using JsonApiDotNetCore.Resources;
@@ -37,11 +38,23 @@ public QueryStringParserBenchmarks()
3738

3839
var resourceFactory = new ResourceFactory(new ServiceContainer());
3940

40-
var includeReader = new IncludeQueryStringParameterReader(request, resourceGraph, options);
41-
var filterReader = new FilterQueryStringParameterReader(request, resourceGraph, resourceFactory, options, Enumerable.Empty<IFilterValueConverter>());
42-
var sortReader = new SortQueryStringParameterReader(request, resourceGraph);
43-
var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader(request, resourceGraph);
44-
var paginationReader = new PaginationQueryStringParameterReader(request, resourceGraph, options);
41+
var includeParser = new IncludeParser(options);
42+
var includeReader = new IncludeQueryStringParameterReader(includeParser, request, resourceGraph);
43+
44+
var filterScopeParser = new QueryStringParameterScopeParser();
45+
var filterValueParser = new FilterParser(resourceFactory, Enumerable.Empty<IFilterValueConverter>());
46+
var filterReader = new FilterQueryStringParameterReader(filterScopeParser, filterValueParser, request, resourceGraph, options);
47+
48+
var sortScopeParser = new QueryStringParameterScopeParser();
49+
var sortValueParser = new SortParser();
50+
var sortReader = new SortQueryStringParameterReader(sortScopeParser, sortValueParser, request, resourceGraph);
51+
52+
var sparseFieldSetScopeParser = new SparseFieldTypeParser(resourceGraph);
53+
var sparseFieldSetValueParser = new SparseFieldSetParser();
54+
var sparseFieldSetReader = new SparseFieldSetQueryStringParameterReader(sparseFieldSetScopeParser, sparseFieldSetValueParser, request, resourceGraph);
55+
56+
var paginationParser = new PaginationParser();
57+
var paginationReader = new PaginationQueryStringParameterReader(paginationParser, request, resourceGraph, options);
4558

4659
IQueryStringParameterReader[] readers = ArrayFactory.Create<IQueryStringParameterReader>(includeReader, filterReader, sortReader,
4760
sparseFieldSetReader, paginationReader);

src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using JsonApiDotNetCore.Middleware;
44
using JsonApiDotNetCore.Queries;
55
using JsonApiDotNetCore.Queries.Internal;
6+
using JsonApiDotNetCore.Queries.Parsing;
67
using JsonApiDotNetCore.QueryStrings;
78
using JsonApiDotNetCore.QueryStrings.Internal;
89
using JsonApiDotNetCore.Repositories;
@@ -210,6 +211,14 @@ private void RegisterImplementationForInterfaces(HashSet<Type> unboundInterfaces
210211

211212
private void AddQueryStringLayer()
212213
{
214+
_services.TryAddTransient<IQueryStringParameterScopeParser, QueryStringParameterScopeParser>();
215+
_services.TryAddTransient<IIncludeParser, IncludeParser>();
216+
_services.TryAddTransient<IFilterParser, FilterParser>();
217+
_services.TryAddTransient<ISortParser, SortParser>();
218+
_services.TryAddTransient<ISparseFieldTypeParser, SparseFieldTypeParser>();
219+
_services.TryAddTransient<ISparseFieldSetParser, SparseFieldSetParser>();
220+
_services.TryAddTransient<IPaginationParser, PaginationParser>();
221+
213222
_services.AddScoped<IIncludeQueryStringParameterReader, IncludeQueryStringParameterReader>();
214223
_services.AddScoped<IFilterQueryStringParameterReader, FilterQueryStringParameterReader>();
215224
_services.AddScoped<ISortQueryStringParameterReader, SortQueryStringParameterReader>();

src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Collections.Immutable;
22
using System.Text;
33
using JetBrains.Annotations;
4-
using JsonApiDotNetCore.Queries.Internal.Parsing;
4+
using JsonApiDotNetCore.Queries.Parsing;
55

66
namespace JsonApiDotNetCore.Queries.Expressions;
77

src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using JetBrains.Annotations;
2-
using JsonApiDotNetCore.Queries.Internal.Parsing;
2+
using JsonApiDotNetCore.Queries.Parsing;
33

44
namespace JsonApiDotNetCore.Queries.Expressions;
55

src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Text;
22
using JetBrains.Annotations;
3-
using JsonApiDotNetCore.Queries.Internal.Parsing;
3+
using JsonApiDotNetCore.Queries.Parsing;
44

55
namespace JsonApiDotNetCore.Queries.Expressions;
66

src/JsonApiDotNetCore/Queries/Expressions/IsTypeExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Text;
22
using JetBrains.Annotations;
33
using JsonApiDotNetCore.Configuration;
4-
using JsonApiDotNetCore.Queries.Internal.Parsing;
4+
using JsonApiDotNetCore.Queries.Parsing;
55

66
namespace JsonApiDotNetCore.Queries.Expressions;
77

src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using JetBrains.Annotations;
2-
using JsonApiDotNetCore.Queries.Internal.Parsing;
2+
using JsonApiDotNetCore.Queries.Parsing;
33

44
namespace JsonApiDotNetCore.Queries.Expressions;
55

src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using JetBrains.Annotations;
2-
using JsonApiDotNetCore.Queries.Internal.Parsing;
2+
using JsonApiDotNetCore.Queries.Parsing;
33

44
namespace JsonApiDotNetCore.Queries.Expressions;
55

0 commit comments

Comments
 (0)