31 lines
996 B
C#
31 lines
996 B
C#
using Microsoft.AspNetCore.Http.Extensions;
|
|
using RhSolutions.Api.Services;
|
|
|
|
namespace RhSolutions.Api.Middleware;
|
|
|
|
public class QueryModifier
|
|
{
|
|
private RequestDelegate _next;
|
|
|
|
public QueryModifier(RequestDelegate nextDelegate)
|
|
{
|
|
_next = nextDelegate;
|
|
}
|
|
|
|
public async Task Invoke(HttpContext context, IProductTypePredicter typePredicter, ProductQueryModifierFactory productQueryModifierFactory)
|
|
{
|
|
if (context.Request.Method == HttpMethods.Get
|
|
&& context.Request.Path == "/api/search")
|
|
{
|
|
string query = context.Request.Query["query"].ToString();
|
|
var productType = typePredicter.GetPredictedProductType(query);
|
|
var modifier = productQueryModifierFactory.GetModifier(productType!);
|
|
if (modifier.TryQueryModify(context.Request.Query, out var newQuery))
|
|
{
|
|
context.Request.QueryString = newQuery;
|
|
}
|
|
}
|
|
await _next(context);
|
|
}
|
|
}
|