68 lines
3.2 KiB
C#
68 lines
3.2 KiB
C#
|
using OpenHarbor.CQRS.DynamicQuery.Abstractions;
|
|||
|
using PoweredSoft.DynamicQuery.Core;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Threading;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace OpenHarbor.CQRS.DynamicQuery;
|
|||
|
|
|||
|
public class DynamicQueryHandler<TSource, TDestination>
|
|||
|
: DynamicQueryHandlerBase<TSource, TDestination>,
|
|||
|
OpenHarbor.CQRS.Abstractions.IQueryHandler<IDynamicQuery<TSource, TDestination>, IQueryExecutionResult<TDestination>>
|
|||
|
where TSource : class
|
|||
|
where TDestination : class
|
|||
|
{
|
|||
|
public DynamicQueryHandler(IQueryHandlerAsync queryHandlerAsync,
|
|||
|
IEnumerable<IQueryableProvider<TSource>> queryableProviders,
|
|||
|
IEnumerable<IAlterQueryableService<TSource, TDestination>> alterQueryableServices,
|
|||
|
IEnumerable<IDynamicQueryInterceptorProvider<TSource, TDestination>> dynamicQueryInterceptorProviders,
|
|||
|
IServiceProvider serviceProvider) : base(queryHandlerAsync, queryableProviders, alterQueryableServices, dynamicQueryInterceptorProviders, serviceProvider)
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
public Task<IQueryExecutionResult<TDestination>> HandleAsync(IDynamicQuery<TSource, TDestination> query, CancellationToken cancellationToken = default)
|
|||
|
{
|
|||
|
return ProcessQueryAsync(query, cancellationToken);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class DynamicQueryHandler<TSource, TDestination, TParams>
|
|||
|
: DynamicQueryHandlerBase<TSource, TDestination>,
|
|||
|
OpenHarbor.CQRS.Abstractions.IQueryHandler<IDynamicQuery<TSource, TDestination, TParams>, IQueryExecutionResult<TDestination>>
|
|||
|
where TSource : class
|
|||
|
where TDestination : class
|
|||
|
where TParams : class
|
|||
|
{
|
|||
|
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,
|
|||
|
IEnumerable<IDynamicQueryInterceptorProvider<TSource, TDestination>> dynamicQueryInterceptorProviders,
|
|||
|
IServiceProvider serviceProvider) : base(queryHandlerAsync, queryableProviders, alterQueryableServices, dynamicQueryInterceptorProviders, serviceProvider)
|
|||
|
{
|
|||
|
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)
|
|||
|
{
|
|||
|
return this.ProcessQueryAsync(query, cancellationToken);
|
|||
|
}
|
|||
|
}
|