summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RhSolutions.Api.Tests/ProductQueryModifierTests.cs18
-rw-r--r--RhSolutions.Api/Middleware/QueryModifier.cs47
-rw-r--r--RhSolutions.QueryModifiers/BypassQueryModifier.cs14
-rw-r--r--RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/DrinkingWaterHeatingFitting.cs23
-rw-r--r--RhSolutions.QueryModifiers/DrinkingWaterHeatingPipes/DrinkingWaterHeatingPipe.cs25
-rw-r--r--RhSolutions.QueryModifiers/IProductQueryModifier.cs2
6 files changed, 45 insertions, 84 deletions
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<string, StringValues> 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);
}