From 9262708ab8ae19eca7fcc0c2d1ec64b8ed07aedc Mon Sep 17 00:00:00 2001 From: David Lebee Date: Fri, 22 Mar 2019 15:38:13 -0500 Subject: [PATCH] now had more generic possibilites. --- .../IAfterReadInterceptor.cs | 10 +++++++ .../IQueryConvertInterceptor.cs | 5 ++++ PoweredSoft.DynamicQuery/QueryHandlerBase.cs | 27 +++++++++++++++---- 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/PoweredSoft.DynamicQuery.Core/IAfterReadInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IAfterReadInterceptor.cs index 3fd0aa8..d47b5ee 100644 --- a/PoweredSoft.DynamicQuery.Core/IAfterReadInterceptor.cs +++ b/PoweredSoft.DynamicQuery.Core/IAfterReadInterceptor.cs @@ -24,4 +24,14 @@ namespace PoweredSoft.DynamicQuery.Core { Task AfterReadAsync(List> pairs, CancellationToken cancellationToken = default(CancellationToken)); } + + public interface IAfterReadInterceptor : IQueryInterceptor + { + void AfterRead(List> pairs); + } + + public interface IAfterReadInterceptorAsync : IQueryInterceptor + { + Task AfterReadAsync(List> pairs, CancellationToken cancellationToken = default(CancellationToken)); + } } diff --git a/PoweredSoft.DynamicQuery.Core/IQueryConvertInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IQueryConvertInterceptor.cs index df386a8..f204a13 100644 --- a/PoweredSoft.DynamicQuery.Core/IQueryConvertInterceptor.cs +++ b/PoweredSoft.DynamicQuery.Core/IQueryConvertInterceptor.cs @@ -13,4 +13,9 @@ namespace PoweredSoft.DynamicQuery.Core { object InterceptResultTo(T entity); } + + public interface IQueryConvertInterceptor : IQueryInterceptor + { + T2 InterceptResultTo(T entity); + } } diff --git a/PoweredSoft.DynamicQuery/QueryHandlerBase.cs b/PoweredSoft.DynamicQuery/QueryHandlerBase.cs index 0eaa2ec..29da988 100644 --- a/PoweredSoft.DynamicQuery/QueryHandlerBase.cs +++ b/PoweredSoft.DynamicQuery/QueryHandlerBase.cs @@ -190,7 +190,7 @@ namespace PoweredSoft.DynamicQuery for (var i = 0; i < entities.Count; i++) ret.Add(InterceptConvertToObject(entities[i])); - var pairs = entities.Select((t, index) => Tuple.Create(t, (object)ret[index])).ToList(); + var pairs = entities.Select((t, index) => Tuple.Create(t, ret[index])).ToList(); await AfterReadInterceptors(pairs); return ret; @@ -209,16 +209,22 @@ namespace PoweredSoft.DynamicQuery await interceptor.AfterReadEntityAsync(entities); } - protected virtual async Task AfterReadInterceptors(List> pairs) + protected virtual async Task AfterReadInterceptors(List> pairs) { + var objPair = pairs.Select(t => Tuple.Create(t.Item1, (object)t.Item2)).ToList(); + Interceptors .Where(t => t is IAfterReadInterceptor) .Cast>() .ToList() - .ForEach(t => t.AfterRead(pairs)); + .ForEach(t => t.AfterRead(objPair)); var asyncInterceptors = Interceptors.Where(t => t is IAfterReadInterceptorAsync).Cast>(); foreach (var interceptor in asyncInterceptors) + await interceptor.AfterReadAsync(objPair); + + var asyncInterceptors2 = Interceptors.Where(t => t is IAfterReadInterceptorAsync).Cast>(); + foreach (var interceptor in asyncInterceptors2) await interceptor.AfterReadAsync(pairs); } @@ -240,6 +246,17 @@ namespace PoweredSoft.DynamicQuery return o; }); + o = Interceptors + .Where(t => t is IQueryConvertInterceptor) + .Cast>() + .Aggregate(o, (prev, interceptor) => + { + if (prev is TSource) + return interceptor.InterceptResultTo((TSource)prev); + + return o; + }); + return (TRecord)o; } @@ -429,7 +446,7 @@ namespace PoweredSoft.DynamicQuery var entities = lists.SelectMany(t => t.entities).ToList(); await AfterEntityReadInterceptors(entities); - var pairs = new List>(); + var pairs = new List>(); lists.ForEach(innerList => { @@ -438,7 +455,7 @@ namespace PoweredSoft.DynamicQuery var entity = innerList.entities[i]; var convertedObject = InterceptConvertToObject(entity); innerList.group.Data.Add(convertedObject); - pairs.Add(Tuple.Create(entity, convertedObject as object)); + pairs.Add(Tuple.Create(entity, convertedObject)); } });