diff --git a/RhSolutions.Api.Tests/ProductQueryModifierTests.cs b/RhSolutions.Api.Tests/ProductQueryModifierTests.cs index 7166899..b9f0e06 100644 --- a/RhSolutions.Api.Tests/ProductQueryModifierTests.cs +++ b/RhSolutions.Api.Tests/ProductQueryModifierTests.cs @@ -1,6 +1,3 @@ -using System.Web; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Primitives; public abstract class ProductQueryModifierTests { protected ProductQueryModifierFactory _factory; @@ -10,17 +7,10 @@ public abstract class ProductQueryModifierTests { _factory = new ProductQueryModifierFactory(); } - public void Execute(string productType, string query, string modified) + public void Execute(string productType, string query, string expected) { - Dictionary queryPair = new() - { - ["query"] = new StringValues(query) - }; - QueryCollection collection = new(queryPair); - var modifier = _factory.GetModifier(productType); - - Assert.True(modifier.TryQueryModify(collection, out var actual)); - string? result = HttpUtility.ParseQueryString(actual.ToString())["query"]; - Assert.That(result, Is.EqualTo(modified)); + var modifier = _factory.GetModifier(productType); + Assert.True(modifier.TryQueryModify(query, out var actual)); + Assert.That(actual, Is.EqualTo(expected)); } } \ No newline at end of file diff --git a/RhSolutions.Api/Middleware/QueryModifier.cs b/RhSolutions.Api/Middleware/QueryModifier.cs index 02756a6..8a68b79 100644 --- a/RhSolutions.Api/Middleware/QueryModifier.cs +++ b/RhSolutions.Api/Middleware/QueryModifier.cs @@ -1,30 +1,35 @@ -using RhSolutions.Api.Services; +using Microsoft.AspNetCore.Http.Extensions; +using RhSolutions.Api.Services; using RhSolutions.QueryModifiers; namespace RhSolutions.Api.Middleware; public class QueryModifier { - private RequestDelegate _next; + private RequestDelegate _next; - public QueryModifier(RequestDelegate nextDelegate) - { - _next = nextDelegate; - } + 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); - } + 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(query, out var modified)) + { + QueryBuilder qb = new() + { + {"query", modified} + }; + context.Request.QueryString = qb.ToQueryString(); + } + } + await _next(context); + } } diff --git a/RhSolutions.QueryModifiers/BypassQueryModifier.cs b/RhSolutions.QueryModifiers/BypassQueryModifier.cs index 2c38b27..a8bba7e 100644 --- a/RhSolutions.QueryModifiers/BypassQueryModifier.cs +++ b/RhSolutions.QueryModifiers/BypassQueryModifier.cs @@ -1,12 +1,10 @@ -using Microsoft.AspNetCore.Http; - -namespace RhSolutions.QueryModifiers; +namespace RhSolutions.QueryModifiers; public sealed class BypassQueryModifier : IProductQueryModifier { - public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) - { - queryString = QueryString.Empty; - return false; - } + public bool TryQueryModify(string query, out string queryModified) + { + queryModified = string.Empty; + return false; + } } \ No newline at end of file diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs index 4ea9574..afd03de 100644 --- a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs @@ -1,6 +1,4 @@ using System.Text.RegularExpressions; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Extensions; namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; @@ -15,25 +13,10 @@ public abstract class DrinkingWaterHeatingFitting : IProductQueryModifier protected virtual string _title { get; } = string.Empty; - public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) + public bool TryQueryModify(string input, out string output) { - queryString = QueryString.Empty; - string query = collection["query"].ToString(); - if (string.IsNullOrEmpty(query)) - { - return false; - } - string? result = BuildRhSolutionsName(query); - if (result != null) - { - QueryBuilder qb = new() - { - { "query", result } - }; - queryString = qb.ToQueryString(); - return true; - } - return false; + output = BuildRhSolutionsName(input) ?? string.Empty; + return !string.IsNullOrEmpty(output); } protected virtual string? BuildRhSolutionsName(string query) diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs index d5981f0..5c1bfd9 100644 --- a/RhSolutions.QueryModifiers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs @@ -30,26 +30,11 @@ public class DrinkingWaterHeatingPipe : IProductQueryModifier ["отр"] = "прям.отрезки" }; - public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) - { - queryString = QueryString.Empty; - string query = collection["query"].ToString(); - if (string.IsNullOrEmpty(query)) - { - return false; - } - string? result = BuildRhSolutionsName(query); - if (result != null) - { - QueryBuilder qb = new() - { - { "query", result } - }; - queryString = qb.ToQueryString(); - return true; - } - return false; - } + public bool TryQueryModify(string input, out string output) + { + output = BuildRhSolutionsName(input) ?? string.Empty; + return !string.IsNullOrEmpty(output); + } protected virtual string? BuildRhSolutionsName(string query) { diff --git a/RhSolutions.QueryModifiers/IProductQueryModifier.cs b/RhSolutions.QueryModifiers/IProductQueryModifier.cs index 508aba5..c1a7b1d 100644 --- a/RhSolutions.QueryModifiers/IProductQueryModifier.cs +++ b/RhSolutions.QueryModifiers/IProductQueryModifier.cs @@ -4,5 +4,5 @@ namespace RhSolutions.QueryModifiers; public interface IProductQueryModifier { - public bool TryQueryModify(IQueryCollection collection, out QueryString queryString); + public bool TryQueryModify(string query, out string queryModified); }