using Microsoft.AspNetCore.Mvc; using PoweredSoft.CQRS.AspNetCore.Mvc; using PoweredSoft.CQRS.DynamicQuery.Abstractions; using PoweredSoft.DynamicQuery.Core; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; namespace PoweredSoft.CQRS.DynamicQuery.AspNetCore.Mvc { [ApiController, Route("api/query/[controller]")] public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination> : Controller where TSource : class where TDestination : class { [HttpPost, QueryControllerAuthorization] public async Task<IQueryExecutionResult<TDestination>> HandleAsync( [FromBody] DynamicQuery<TSource, TDestination> query, [FromServices]PoweredSoft.CQRS.Abstractions.IQueryHandler<IDynamicQuery<TSource, TDestination>, IQueryExecutionResult<TDestination>> queryHandler ) { var result = await queryHandler.HandleAsync(query, HttpContext.RequestAborted); return result; } [HttpGet, QueryControllerAuthorization] public async Task<IQueryExecutionResult<TDestination>> HandleGetAsync( [FromQuery] DynamicQuery<TSource, TDestination> query, [FromServices] PoweredSoft.CQRS.Abstractions.IQueryHandler<IDynamicQuery<TSource, TDestination>, IQueryExecutionResult<TDestination>> queryHandler ) { var result = await queryHandler.HandleAsync(query, HttpContext.RequestAborted); return result; } } [ApiController, Route("api/query/[controller]")] public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination, TParams> : Controller where TSource : class where TDestination : class where TParams : class { [HttpPost, QueryControllerAuthorization] public async Task<IQueryExecutionResult<TDestination>> HandleAsync( [FromBody] DynamicQuery<TSource, TDestination, TParams> query, [FromServices] PoweredSoft.CQRS.Abstractions.IQueryHandler<IDynamicQuery<TSource, TDestination, TParams>, IQueryExecutionResult<TDestination>> queryHandler ) { var result = await queryHandler.HandleAsync(query, HttpContext.RequestAborted); return result; } [HttpGet, QueryControllerAuthorization] public async Task<IQueryExecutionResult<TDestination>> HandleGetAsync( [FromQuery] DynamicQuery<TSource, TDestination, TParams> query, [FromServices] PoweredSoft.CQRS.Abstractions.IQueryHandler<IDynamicQuery<TSource, TDestination, TParams>, IQueryExecutionResult<TDestination>> queryHandler ) { var result = await queryHandler.HandleAsync(query, HttpContext.RequestAborted); return result; } } }