Skip to content

Commit a8468e3

Browse files
authored
Merge pull request #8 from PoweredSoft/feature/queryinterceptorprovider
Resolve Query Interceptor and queryable Interceptor provider :)
2 parents 5be4b7e + 6a49098 commit a8468e3

22 files changed

+158
-52
lines changed

PoweredSoft.DynamicQuery.Cli/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private static void Play1()
119119
new Aggregate { Path = "AgeStr", Type = AggregateType.Avg }
120120
};;
121121

122-
var handler = new QueryHandler();
122+
var handler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
123123
handler.AddInterceptor(new PersonQueryInterceptor());
124124
var result = handler.Execute(queryable, criteria);
125125

PoweredSoft.DynamicQuery.Core/IQueryHandler.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using System.Text;
45
using System.Threading;
@@ -9,6 +10,7 @@ namespace PoweredSoft.DynamicQuery.Core
910
public interface IInterceptableQueryHandler
1011
{
1112
void AddInterceptor(IQueryInterceptor interceptor);
13+
IReadOnlyList<IQueryInterceptor> ResolveInterceptors<TSource, TResult>(IQueryCriteria criteria, IQueryable<TSource> queryable);
1214
}
1315

1416
public interface IQueryHandler : IInterceptableQueryHandler
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
4+
namespace PoweredSoft.DynamicQuery.Core
5+
{
6+
public interface IQueryInterceptorProvider
7+
{
8+
IEnumerable<IQueryInterceptor> GetInterceptors<TSource, TResult>(IQueryCriteria queryCriteria, IQueryable<TSource> queryable);
9+
}
10+
}

PoweredSoft.DynamicQuery.Test/AggregateInterceptorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void Simple()
3838
Type = AggregateType.Avg,
3939
Path = "ItemPrice"
4040
});
41-
var queryHandler = new QueryHandler();
41+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
4242
queryHandler.AddInterceptor(new MockAggregateInterceptor());
4343
var result = queryHandler.Execute(ctx.Items, criteria);
4444
Assert.Equal(expected.PriceAtTheTime, result.Aggregates.First().Value);

PoweredSoft.DynamicQuery.Test/AggregateTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void WithoutGrouping()
5656
}
5757
};
5858

59-
var queryHandler = new QueryHandler();
59+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
6060
var result = queryHandler.Execute(ctx.OrderItems, criteria, new QueryExecutionOptions
6161
{
6262
GroupByInMemory = true
@@ -122,7 +122,7 @@ public void WithGrouping()
122122
}
123123
};
124124

125-
var queryHandler = new QueryHandler();
125+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
126126
var queryable = ctx.OrderItems.Include(t => t.Order);
127127
var result = queryHandler.Execute(queryable, criteria, new QueryExecutionOptions
128128
{

PoweredSoft.DynamicQuery.Test/AsyncTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public void TestEmptyCriteria()
2727
// query handler that is empty should be the same as running to list.
2828
var aqf = new AsyncQueryableService(new[] { new AsyncQueryableHandlerService() });
2929
var criteria = new QueryCriteria();
30-
var queryHandler = new QueryHandlerAsync(aqf);
30+
var queryHandler = new QueryHandlerAsync(aqf, Enumerable.Empty<IQueryInterceptorProvider>());
3131
var result = await queryHandler.ExecuteAsync(queryable, criteria);
3232
Assert.Equal(resultShouldMatch, result.Data);
3333
});
@@ -66,7 +66,7 @@ public void WithGrouping()
6666
}
6767
};
6868
var asyncService = new AsyncQueryableService(new[] { new AsyncQueryableHandlerService() });
69-
var queryHandler = new QueryHandlerAsync(asyncService);
69+
var queryHandler = new QueryHandlerAsync(asyncService, Enumerable.Empty<IQueryInterceptorProvider>());
7070
var result = await queryHandler.ExecuteAsync(ctx.OrderItems.Include(t => t.Order.Customer), criteria, new QueryExecutionOptions
7171
{
7272
GroupByInMemory = true
@@ -118,7 +118,7 @@ public void SimpleFilter()
118118
};
119119

120120
var asyncService = new AsyncQueryableService(new[] { new AsyncQueryableHandlerService() });
121-
var queryHandler = new QueryHandlerAsync(asyncService);
121+
var queryHandler = new QueryHandlerAsync(asyncService, Enumerable.Empty<IQueryInterceptorProvider>());
122122
var result = await queryHandler.ExecuteAsync(ctx.Items, criteria);
123123
Assert.Equal(resultShouldMatch, result.Data);
124124
});
@@ -146,7 +146,7 @@ public void SimpleFilterWithNot()
146146
};
147147

148148
var asyncService = new AsyncQueryableService(new[] { new AsyncQueryableHandlerService() });
149-
var queryHandler = new QueryHandlerAsync(asyncService);
149+
var queryHandler = new QueryHandlerAsync(asyncService, Enumerable.Empty<IQueryInterceptorProvider>());
150150
var result = await queryHandler.ExecuteAsync(ctx.Items, criteria);
151151
Assert.Equal(resultShouldMatch, result.Data);
152152
});
@@ -166,7 +166,7 @@ public void TestPaging()
166166
criteria.PageSize = 5;
167167

168168
var asyncService = new AsyncQueryableService(new[] { new AsyncQueryableHandlerService() });
169-
var queryHandler = new QueryHandlerAsync(asyncService);
169+
var queryHandler = new QueryHandlerAsync(asyncService, Enumerable.Empty<IQueryInterceptorProvider>());
170170
var result = await queryHandler.ExecuteAsync(ctx.OrderItems, criteria);
171171
Assert.Equal(resultShouldMatch, result.Data);
172172
});
@@ -205,7 +205,7 @@ public void WithGroupingInterceptorOptions()
205205
}
206206
};
207207
var asyncService = new AsyncQueryableService(new[] { new AsyncQueryableHandlerService() });
208-
var queryHandler = new QueryHandlerAsync(asyncService);
208+
var queryHandler = new QueryHandlerAsync(asyncService, Enumerable.Empty<IQueryInterceptorProvider>());
209209
queryHandler.AddInterceptor(new MockQueryExecutionOptionsInterceptor());
210210
var result = await queryHandler.ExecuteAsync(ctx.OrderItems.Include(t => t.Order.Customer), criteria);
211211

PoweredSoft.DynamicQuery.Test/BeforeFilterTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void NonGeneric()
5050
queryable = (IQueryable<Order>)interceptor.InterceptBeforeFiltering(criteria, queryable);
5151

5252
// query handler should pass by the same interceptor.
53-
var queryHandler = new QueryHandler();
53+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
5454
queryHandler.AddInterceptor(interceptor);
5555
var result = queryHandler.Execute(ctx.Orders, criteria);
5656

@@ -75,7 +75,7 @@ public void Generic()
7575
queryable = interceptor.InterceptBeforeFiltering(criteria, queryable);
7676

7777
// query handler should pass by the same interceptor.
78-
var queryHandler = new QueryHandler();
78+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
7979
queryHandler.AddInterceptor(interceptor);
8080
var result = queryHandler.Execute(ctx.Orders, criteria);
8181

PoweredSoft.DynamicQuery.Test/ConvertibleInterceptorTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using PoweredSoft.DynamicQuery.Test.Mock;
33
using System;
44
using System.Collections.Generic;
5+
using System.Linq;
56
using System.Text;
67
using Xunit;
78

@@ -77,7 +78,7 @@ public void NonGeneric()
7778
MockContextFactory.SeedAndTestContextFor("QueryConvertInterceptorTests_NonGeneric", TestSeeders.SimpleSeedScenario, ctx =>
7879
{
7980
var criteria = new QueryCriteria();
80-
var queryHandler = new QueryHandler();
81+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
8182
queryHandler.AddInterceptor(new MockQueryConvertInterceptor());
8283
var result = queryHandler.Execute<Customer, CustomerModel>(ctx.Customers, criteria);
8384
Assert.All(result.Data, t => Assert.IsType<CustomerModel>(t));
@@ -90,7 +91,7 @@ public void Generic()
9091
MockContextFactory.SeedAndTestContextFor("ConvertibleIntereceptorTests_Generic", TestSeeders.SimpleSeedScenario, ctx =>
9192
{
9293
var criteria = new QueryCriteria();
93-
var queryHandler = new QueryHandler();
94+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
9495
queryHandler.AddInterceptor(new MockQueryConvertGenericInterceptor());
9596
var result = queryHandler.Execute<Customer, CustomerModel>(ctx.Customers, criteria);
9697
Assert.All(result.Data, t => Assert.IsType<CustomerModel>(t));
@@ -103,7 +104,7 @@ public void Generic2()
103104
MockContextFactory.SeedAndTestContextFor("ConvertibleIntereceptorTests_Generic2", TestSeeders.SimpleSeedScenario, ctx =>
104105
{
105106
var criteria = new QueryCriteria();
106-
var queryHandler = new QueryHandler();
107+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
107108
queryHandler.AddInterceptor(new MockQueryConvertGenericInterceptor2());
108109
var result = queryHandler.Execute<Customer, CustomerModel>(ctx.Customers, criteria);
109110
Assert.All(result.Data, t => Assert.IsType<CustomerModel>(t));

PoweredSoft.DynamicQuery.Test/CriteriaTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using Microsoft.EntityFrameworkCore;
5+
using PoweredSoft.DynamicQuery.Core;
56
using PoweredSoft.DynamicQuery.Test.Mock;
67
using Xunit;
78

@@ -19,7 +20,7 @@ public void TestEmptyCriteria()
1920

2021
// query handler that is empty should be the same as running to list.
2122
var criteria = new QueryCriteria();
22-
var queryHandler = new QueryHandler();
23+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
2324
var result = queryHandler.Execute(queryable, criteria);
2425
Assert.Equal(resultShouldMatch, result.Data);
2526
});
@@ -38,7 +39,7 @@ public void TestPaging()
3839
criteria.Page = 2;
3940
criteria.PageSize = 5;
4041

41-
var queryHandler = new QueryHandler();
42+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
4243
var result = queryHandler.Execute(ctx.OrderItems, criteria);
4344
Assert.Equal(resultShouldMatch, result.Data);
4445
});

PoweredSoft.DynamicQuery.Test/FilterInterceptorTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public void Simple()
5858
}
5959
};
6060

61-
var query = new QueryHandler();
61+
var query = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
6262
query.AddInterceptor(new MockFilterInterceptorA());
6363
var result = query.Execute(queryable, criteria);
6464

@@ -83,7 +83,7 @@ public void SimpleWithExtensions()
8383
}
8484
};
8585

86-
var query = new QueryHandler();
86+
var query = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
8787
query.AddInterceptor(new MockFilterInterceptorAWithExtension());
8888
var result = query.Execute(queryable, criteria);
8989

@@ -108,7 +108,7 @@ public void SimpleWithExtensions2()
108108
}
109109
};
110110

111-
var query = new QueryHandler();
111+
var query = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
112112
query.AddInterceptor(new MockFilterInterceptorAWithExtension());
113113
var result = query.Execute(queryable, criteria);
114114

@@ -133,7 +133,7 @@ public void Multi()
133133
}
134134
};
135135

136-
var query = new QueryHandler();
136+
var query = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
137137
query.AddInterceptor(new MockFilterInterceptorA());
138138
query.AddInterceptor(new MockFilterInterceptorB());
139139
var result = query.Execute(queryable, criteria);

PoweredSoft.DynamicQuery.Test/FilterTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public void TestInversionOfControl()
3232
Filters = new List<IFilter> { new MockIsChuckFilter() }
3333
};
3434

35-
var queryHandler = new QueryHandler();
35+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
3636
var result = queryHandler.Execute(ctx.Customers, criteria);
3737
Assert.Equal(resultShouldMatch, result.Data);
3838
});
@@ -58,7 +58,7 @@ public void SimpleFilter()
5858
}
5959
};
6060

61-
var queryHandler = new QueryHandler();
61+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
6262
var result = queryHandler.Execute(ctx.Items, criteria);
6363
Assert.Equal(resultShouldMatch, result.Data);
6464
});
@@ -89,7 +89,7 @@ public void CompositeFilter()
8989
}
9090
};
9191

92-
var queryHandler = new QueryHandler();
92+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
9393
var result = queryHandler.Execute(ctx.Customers, criteria);
9494
Assert.Equal(resultShouldMatch, result.Data);
9595
});
@@ -125,7 +125,7 @@ public void MoreComplexCompositeFilter()
125125
}
126126
};
127127

128-
var queryHandler = new QueryHandler();
128+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
129129
var result = queryHandler.Execute(ctx.Customers, criteria);
130130
Assert.Equal(resultShouldMatch, result.Data);
131131
});

PoweredSoft.DynamicQuery.Test/GroupInterceptorTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void Simple()
3636

3737
var criteria = new QueryCriteria();
3838
criteria.Groups.Add(new Group { Path = "CustomerFirstName" });
39-
var queryHandler = new QueryHandler();
39+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
4040
queryHandler.AddInterceptor(new MockGroupInterceptor());
4141
var result = queryHandler.Execute(ctx.Orders.Include(t => t.Customer), criteria, new QueryExecutionOptions
4242
{
@@ -52,7 +52,7 @@ public void Simple()
5252
[Fact]
5353
public void WithInterptorSimple()
5454
{
55-
MockContextFactory.SeedAndTestContextFor("GroupInterceptorTests_Simple", TestSeeders.SimpleSeedScenario, ctx =>
55+
MockContextFactory.SeedAndTestContextFor("GroupInterceptorTests_WithInterptorSimple", TestSeeders.SimpleSeedScenario, ctx =>
5656
{
5757
var expected = ctx.Orders
5858
.OrderBy(t => t.Customer.FirstName)
@@ -62,7 +62,7 @@ public void WithInterptorSimple()
6262

6363
var criteria = new QueryCriteria();
6464
criteria.Groups.Add(new Group { Path = "CustomerFirstName" });
65-
var queryHandler = new QueryHandler();
65+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
6666
queryHandler.AddInterceptor(new MockGroupInterceptor());
6767
queryHandler.AddInterceptor(new MockQueryExecutionOptionsInterceptor());
6868
var result = queryHandler.Execute(ctx.Orders.Include(t => t.Customer), criteria);

PoweredSoft.DynamicQuery.Test/GroupTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void Simple()
3939
}
4040
};
4141

42-
var queryHandler = new QueryHandler();
42+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
4343
var result = queryHandler.Execute(ctx.Orders, criteria, new QueryExecutionOptions
4444
{
4545
GroupByInMemory = true,
@@ -80,7 +80,7 @@ public void GroupComplex()
8080
}
8181
};
8282

83-
var queryHandler = new QueryHandler();
83+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
8484
var result = queryHandler.Execute(ctx.Tickets, criteria, new QueryExecutionOptions
8585
{
8686
GroupByInMemory = true
@@ -117,7 +117,7 @@ public void InterceptorsWithGrouping()
117117
};
118118

119119
var interceptor = new InterceptorsWithGrouping();
120-
var queryHandler = new QueryHandler();
120+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
121121
queryHandler.AddInterceptor(interceptor);
122122
var result = queryHandler.Execute<Ticket, InterceptorWithGroupingFakeModel>(ctx.Tickets, criteria, new QueryExecutionOptions
123123
{

PoweredSoft.DynamicQuery.Test/IncludeStrategyTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void NonGeneric()
5151
queryable = (IQueryable<Order>)interceptor.InterceptIncludeStrategy(criteria, queryable);
5252

5353
// query handler should pass by the same interceptor.
54-
var queryHandler = new QueryHandler();
54+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
5555
queryHandler.AddInterceptor(interceptor);
5656
var result = queryHandler.Execute(ctx.Orders, criteria);
5757

@@ -76,7 +76,7 @@ public void Generic()
7676
queryable = interceptor.InterceptIncludeStrategy(criteria, queryable);
7777

7878
// query handler should pass by the same interceptor.
79-
var queryHandler = new QueryHandler();
79+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
8080
queryHandler.AddInterceptor(interceptor);
8181
var result = queryHandler.Execute(ctx.Orders, criteria);
8282

PoweredSoft.DynamicQuery.Test/NoSortTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void NonGeneric()
5151
queryable = (IQueryable<Order>)interceptor.InterceptNoSort(criteria, queryable);
5252

5353
// query handler should pass by the same interceptor.
54-
var queryHandler = new QueryHandler();
54+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
5555
queryHandler.AddInterceptor(interceptor);
5656
var result = queryHandler.Execute(ctx.Orders, criteria);
5757

@@ -76,7 +76,7 @@ public void Generic()
7676
queryable = interceptor.InterceptNoSort(criteria, queryable);
7777

7878
// query handler should pass by the same interceptor.
79-
var queryHandler = new QueryHandler();
79+
var queryHandler = new QueryHandler(Enumerable.Empty<IQueryInterceptorProvider>());
8080
queryHandler.AddInterceptor(interceptor);
8181
var result = queryHandler.Execute(ctx.Orders, criteria);
8282

0 commit comments

Comments
 (0)