added alter queryable service.
This commit is contained in:
parent
972a4060ca
commit
0d3fbbcd01
@ -6,6 +6,15 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Demo.DynamicQueries
|
namespace Demo.DynamicQueries
|
||||||
{
|
{
|
||||||
|
public class SearchContactParamsService : IAlterQueryableService<Contact, Contact, SearchContactParams>
|
||||||
|
{
|
||||||
|
public Task<IQueryable<Contact>> AlterQueryableAsync(IQueryable<Contact> query, IDynamicQueryParams<SearchContactParams> dynamicQuery, CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
var safe = dynamicQuery.GetParams()?.SearchDisplayName;
|
||||||
|
return Task.FromResult(query.Where(t => t.DisplayName.Contains(safe)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class ContactQueryableProvider : IQueryableProvider<Contact>
|
public class ContactQueryableProvider : IQueryableProvider<Contact>
|
||||||
{
|
{
|
||||||
public Task<IQueryable<Contact>> GetQueryableAsync(object query, CancellationToken cancelllationToken = default)
|
public Task<IQueryable<Contact>> GetQueryableAsync(object query, CancellationToken cancelllationToken = default)
|
||||||
|
@ -63,7 +63,8 @@ namespace Demo
|
|||||||
{
|
{
|
||||||
services.AddTransient<IQueryableProvider<Contact>, ContactQueryableProvider>();
|
services.AddTransient<IQueryableProvider<Contact>, ContactQueryableProvider>();
|
||||||
services.AddDynamicQuery<Contact>();
|
services.AddDynamicQuery<Contact>();
|
||||||
services.AddDynamicQueryWithParams<Contact, SearchContactParams>(name: "SearchContacts");
|
services.AddDynamicQueryWithParams<Contact, SearchContactParams>(name: "SearchContacts")
|
||||||
|
.AddAlterQueryableWithParams<Contact, SearchContactParams, SearchContactParamsService>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddCommands(IServiceCollection services)
|
private void AddCommands(IServiceCollection services)
|
||||||
|
@ -2,17 +2,18 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace PoweredSoft.CQRS.DynamicQuery.Abstractions
|
namespace PoweredSoft.CQRS.DynamicQuery.Abstractions
|
||||||
{
|
{
|
||||||
public interface IAlterQueryableService<TSource, TDestination>
|
public interface IAlterQueryableService<TSource, TDestination>
|
||||||
{
|
{
|
||||||
Task<IQueryable<TSource>> AlterQueryableAsync(IQueryable<TSource> query, IDynamicQuery dynamicQuery);
|
Task<IQueryable<TSource>> AlterQueryableAsync(IQueryable<TSource> query, IDynamicQuery dynamicQuery, CancellationToken cancellationToken = default);
|
||||||
}
|
}
|
||||||
public interface IAlterQueryableService<TSource, TDestination, TParams>
|
public interface IAlterQueryableService<TSource, TDestination, TParams>
|
||||||
where TParams : class
|
where TParams : class
|
||||||
{
|
{
|
||||||
Task<IQueryable<TSource>> AlterQueryableAsync(IQueryable<TSource> query, IDynamicQueryParams<TParams> dynamicQuery);
|
Task<IQueryable<TSource>> AlterQueryableAsync(IQueryable<TSource> query, IDynamicQueryParams<TParams> dynamicQuery, CancellationToken cancellationToken = default);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using PoweredSoft.CQRS.DynamicQuery.Abstractions;
|
using PoweredSoft.CQRS.DynamicQuery.Abstractions;
|
||||||
using PoweredSoft.DynamicQuery.Core;
|
using PoweredSoft.DynamicQuery.Core;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@ -12,7 +13,9 @@ namespace PoweredSoft.CQRS.DynamicQuery
|
|||||||
where TSource : class
|
where TSource : class
|
||||||
where TDestination : class
|
where TDestination : class
|
||||||
{
|
{
|
||||||
public DynamicQueryHandler(IQueryHandlerAsync queryHandlerAsync, IEnumerable<IQueryableProvider<TSource>> queryableProviders) : base(queryHandlerAsync, queryableProviders)
|
public DynamicQueryHandler(IQueryHandlerAsync queryHandlerAsync,
|
||||||
|
IEnumerable<IQueryableProvider<TSource>> queryableProviders,
|
||||||
|
IEnumerable<IAlterQueryableService<TSource, TDestination>> alterQueryableServices) : base(queryHandlerAsync, queryableProviders, alterQueryableServices)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,8 +32,27 @@ namespace PoweredSoft.CQRS.DynamicQuery
|
|||||||
where TDestination : class
|
where TDestination : class
|
||||||
where TParams : class
|
where TParams : class
|
||||||
{
|
{
|
||||||
public DynamicQueryHandler(IQueryHandlerAsync queryHandlerAsync, IEnumerable<IQueryableProvider<TSource>> queryableProviders) : base(queryHandlerAsync, queryableProviders)
|
private readonly IEnumerable<IAlterQueryableService<TSource, TDestination, TParams>> alterQueryableServicesWithParams;
|
||||||
|
|
||||||
|
public DynamicQueryHandler(IQueryHandlerAsync queryHandlerAsync,
|
||||||
|
IEnumerable<IQueryableProvider<TSource>> queryableProviders,
|
||||||
|
IEnumerable<IAlterQueryableService<TSource, TDestination>> alterQueryableServices,
|
||||||
|
IEnumerable<IAlterQueryableService<TSource, TDestination, TParams>> alterQueryableServicesWithParams) : base(queryHandlerAsync, queryableProviders, alterQueryableServices)
|
||||||
{
|
{
|
||||||
|
this.alterQueryableServicesWithParams = alterQueryableServicesWithParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task<IQueryable<TSource>> AlterSourceAsync(IQueryable<TSource> source, IDynamicQuery query, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
source = await base.AlterSourceAsync(source, query, cancellationToken);
|
||||||
|
|
||||||
|
if (query is IDynamicQueryParams<TParams> withParams)
|
||||||
|
{
|
||||||
|
foreach (var it in alterQueryableServicesWithParams)
|
||||||
|
source = await it.AlterQueryableAsync(source, withParams, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<IQueryExecutionResult<TDestination>> HandleAsync(IDynamicQuery<TSource, TDestination, TParams> query, CancellationToken cancellationToken = default)
|
public Task<IQueryExecutionResult<TDestination>> HandleAsync(IDynamicQuery<TSource, TDestination, TParams> query, CancellationToken cancellationToken = default)
|
||||||
|
@ -15,12 +15,15 @@ namespace PoweredSoft.CQRS.DynamicQuery
|
|||||||
{
|
{
|
||||||
private readonly IQueryHandlerAsync queryHandlerAsync;
|
private readonly IQueryHandlerAsync queryHandlerAsync;
|
||||||
private readonly IEnumerable<IQueryableProvider<TSource>> queryableProviders;
|
private readonly IEnumerable<IQueryableProvider<TSource>> queryableProviders;
|
||||||
|
private readonly IEnumerable<IAlterQueryableService<TSource, TDestination>> alterQueryableServices;
|
||||||
|
|
||||||
public DynamicQueryHandlerBase(IQueryHandlerAsync queryHandlerAsync,
|
public DynamicQueryHandlerBase(IQueryHandlerAsync queryHandlerAsync,
|
||||||
IEnumerable<IQueryableProvider<TSource>> queryableProviders)
|
IEnumerable<IQueryableProvider<TSource>> queryableProviders,
|
||||||
|
IEnumerable<IAlterQueryableService<TSource, TDestination>> alterQueryableServices)
|
||||||
{
|
{
|
||||||
this.queryHandlerAsync = queryHandlerAsync;
|
this.queryHandlerAsync = queryHandlerAsync;
|
||||||
this.queryableProviders = queryableProviders;
|
this.queryableProviders = queryableProviders;
|
||||||
|
this.alterQueryableServices = alterQueryableServices;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual Task<IQueryable<TSource>> GetQueryableAsync(IDynamicQuery query, CancellationToken cancellationToken = default)
|
protected virtual Task<IQueryable<TSource>> GetQueryableAsync(IDynamicQuery query, CancellationToken cancellationToken = default)
|
||||||
@ -56,9 +59,12 @@ namespace PoweredSoft.CQRS.DynamicQuery
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual Task<IQueryable<TSource>> AlterSourceAsync(IQueryable<TSource> source, IDynamicQuery query, CancellationToken cancellationToken)
|
protected virtual async Task<IQueryable<TSource>> AlterSourceAsync(IQueryable<TSource> source, IDynamicQuery query, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
return Task.FromResult(source);
|
foreach (var t in alterQueryableServices)
|
||||||
|
source = await t.AlterQueryableAsync(source, query, cancellationToken);
|
||||||
|
|
||||||
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual IQueryCriteria CreateCriteriaFromQuery(IDynamicQuery query)
|
protected virtual IQueryCriteria CreateCriteriaFromQuery(IDynamicQuery query)
|
||||||
|
Loading…
Reference in New Issue
Block a user