diff options
-rw-r--r-- | RhSolutions.Api.Tests/BypassQueryModifier.cs (renamed from RhSolutions.QueryModifiers/BypassQueryModifier.cs) | 2 | ||||
-rw-r--r-- | RhSolutions.Api.Tests/ProductQueryModifierFactory.cs (renamed from RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs) | 4 | ||||
-rw-r--r-- | RhSolutions.Api.Tests/ProductQueryModifierTests.cs | 4 | ||||
-rw-r--r-- | RhSolutions.Api/Middleware/QueryModifier.cs | 12 | ||||
-rw-r--r-- | RhSolutions.Api/Models/RhsolutionsContext.cs | 6 | ||||
-rw-r--r-- | RhSolutions.Api/Program.cs | 46 | ||||
-rw-r--r-- | RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Elbow.cs (renamed from RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ElbowModifier.cs) | 2 |
7 files changed, 57 insertions, 19 deletions
diff --git a/RhSolutions.QueryModifiers/BypassQueryModifier.cs b/RhSolutions.Api.Tests/BypassQueryModifier.cs index a8bba7e..d6c8367 100644 --- a/RhSolutions.QueryModifiers/BypassQueryModifier.cs +++ b/RhSolutions.Api.Tests/BypassQueryModifier.cs @@ -1,4 +1,4 @@ -namespace RhSolutions.QueryModifiers; +namespace RhSolutions.Api.Tests; public sealed class BypassQueryModifier : IProductQueryModifier { diff --git a/RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs b/RhSolutions.Api.Tests/ProductQueryModifierFactory.cs index 12b99c8..da8ea09 100644 --- a/RhSolutions.QueryModifiers/ProductQueryModifierFactory.cs +++ b/RhSolutions.Api.Tests/ProductQueryModifierFactory.cs @@ -1,7 +1,7 @@ using RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; using RhSolutions.QueryModifiers.DrinkingWaterHeatingPipes; -namespace RhSolutions.QueryModifiers; +namespace RhSolutions.Api.Tests; public class ProductQueryModifierFactory { @@ -40,7 +40,7 @@ public class ProductQueryModifierFactory case "Муфта соединительная": return new Coupling(); case "Угольник RAUTITAN": - return new ElbowModifier(); + return new Elbow(); case "Фиксатор поворота отопление": return new BendFormerHeating(); case "Фиксатор поворота водоснабжение": diff --git a/RhSolutions.Api.Tests/ProductQueryModifierTests.cs b/RhSolutions.Api.Tests/ProductQueryModifierTests.cs index b9f0e06..16c6054 100644 --- a/RhSolutions.Api.Tests/ProductQueryModifierTests.cs +++ b/RhSolutions.Api.Tests/ProductQueryModifierTests.cs @@ -1,3 +1,5 @@ +namespace RhSolutions.Api.Tests; + public abstract class ProductQueryModifierTests { protected ProductQueryModifierFactory _factory; @@ -10,7 +12,7 @@ public abstract class ProductQueryModifierTests public void Execute(string productType, string query, string expected) { var modifier = _factory.GetModifier(productType); - Assert.True(modifier.TryQueryModify(query, out var actual)); + Assert.That(modifier.TryQueryModify(query, out var actual), Is.True); 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 8a68b79..de08a86 100644 --- a/RhSolutions.Api/Middleware/QueryModifier.cs +++ b/RhSolutions.Api/Middleware/QueryModifier.cs @@ -7,21 +7,25 @@ namespace RhSolutions.Api.Middleware; public class QueryModifier { private RequestDelegate _next; + private IServiceProvider _provider; + private IProductQueryModifier? _modifier; - public QueryModifier(RequestDelegate nextDelegate) + public QueryModifier(RequestDelegate nextDelegate, IServiceProvider provider) { _next = nextDelegate; + _provider = provider; } - public async Task Invoke(HttpContext context, IProductTypePredicter typePredicter, ProductQueryModifierFactory productQueryModifierFactory) + public async Task Invoke(HttpContext context, IProductTypePredicter typePredicter) { 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)) + _modifier = _provider.GetRequiredKeyedService<IProductQueryModifier>(productType); + if (_modifier == null) return; + if (_modifier.TryQueryModify(query, out var modified)) { QueryBuilder qb = new() { diff --git a/RhSolutions.Api/Models/RhsolutionsContext.cs b/RhSolutions.Api/Models/RhsolutionsContext.cs index 9d9169f..e9df2eb 100644 --- a/RhSolutions.Api/Models/RhsolutionsContext.cs +++ b/RhSolutions.Api/Models/RhsolutionsContext.cs @@ -14,8 +14,8 @@ public class RhSolutionsContext : DbContext builder.Entity<Product>() .Property(e => e.ProductSku) .HasConversion(v => v.ToString(), v => new ProductSku(v)); - builder.Entity<Product>() - .Property(e => e.DeprecatedSkus) - .HasPostgresArrayConversion<ProductSku, string>(v => v.ToString(), v => new ProductSku(v)); + // builder.Entity<Product>() + // .Property(e => e.DeprecatedSkus) + // .HasPostgresArrayConversion<ProductSku, string>(v => v.ToString(), v => new ProductSku(v)); } } diff --git a/RhSolutions.Api/Program.cs b/RhSolutions.Api/Program.cs index 006e312..d66735c 100644 --- a/RhSolutions.Api/Program.cs +++ b/RhSolutions.Api/Program.cs @@ -3,14 +3,16 @@ using RhSolutions.Models; using RhSolutions.Api.Services; using RhSolutions.Api.Middleware; using RhSolutions.QueryModifiers; +using RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; +using RhSolutions.QueryModifiers.DrinkingWaterHeatingPipes; var builder = WebApplication.CreateBuilder(args); -string dbHost = builder.Configuration["DB_HOST"], - dbPort = builder.Configuration["DB_PORT"], - dbName = builder.Configuration["DB_DATABASE"], - dbUser = builder.Configuration["DB_USER"], - dbPassword = builder.Configuration["DB_PASSWORD"]; +string dbHost = builder.Configuration["DB_HOST"] ?? "localhost", + dbPort = builder.Configuration["DB_PORT"] ?? "5000", + dbName = builder.Configuration["DB_DATABASE"] ?? "rhsolutions", + dbUser = builder.Configuration["DB_USER"] ?? "chebser", + dbPassword = builder.Configuration["DB_PASSWORD"] ?? "Rehau-987"; string connectionString = builder.Configuration["ConnectionsStrings:RhSolutionsLocal"] ?? $"Host={dbHost};Port={dbPort};Database={dbName};Username={dbUser};Password={dbPassword}"; @@ -24,10 +26,40 @@ builder.Services.AddDbContext<RhSolutionsContext>(opts => } }); builder.Services.AddScoped<IPricelistParser, ClosedXMLParser>() - .AddScoped<IProductTypePredicter, ProductTypePredicter>() - .AddSingleton<ProductQueryModifierFactory>(); + .AddScoped<IProductTypePredicter, ProductTypePredicter>(); builder.Services.AddControllers(); +builder.Services.AddKeyedScoped<IProductQueryModifier, Sleeve>("Монтажная гильза") + .AddKeyedScoped<IProductQueryModifier, SupportingClip>("Желоб") + .AddKeyedScoped<IProductQueryModifier, TPiece>("Тройник RAUTITAN") + .AddKeyedScoped<IProductQueryModifier, ThreadTPieceExternal>("Тройник RAUTITAN резьбовой наружный") + .AddKeyedScoped<IProductQueryModifier, ThreadTPieceInternal>("Тройник RAUTITAN резьбовой внутренний") + .AddKeyedScoped<IProductQueryModifier, AdapterExternal>("Переходник на наружную резьбу") + .AddKeyedScoped<IProductQueryModifier, AdapterInternal>("Переходник на внутреннюю резьбу") + .AddKeyedScoped<IProductQueryModifier, AdapterScrewcap>("Переходник с накидной гайкой") + .AddKeyedScoped<IProductQueryModifier, ThreadElbowExternal>("Угольник с наружной резьбой") + .AddKeyedScoped<IProductQueryModifier, ThreadElbowInternal>("Угольник с внутренней резьбой") + .AddKeyedScoped<IProductQueryModifier, ThreadElbowWallExternal>("Угольник настенный наружный") + .AddKeyedScoped<IProductQueryModifier, ThreadElbowWallInternal>("Угольник настенный внутренний") + .AddKeyedScoped<IProductQueryModifier, ThreadElbowDoubleWallInternal>("Проточный настенный угольник") + .AddKeyedScoped<IProductQueryModifier, ScrewcapElbow>("Угольник с накидной гайкой") + .AddKeyedScoped<IProductQueryModifier, Coupling>("Муфта соединительная") + .AddKeyedScoped<IProductQueryModifier, Elbow>("Угольник RAUTITAN") + .AddKeyedScoped<IProductQueryModifier, BendFormerHeating>("Фиксатор поворота отопление") + .AddKeyedScoped<IProductQueryModifier, BendFormerSanitary>("Фиксатор поворота водоснабжение") + .AddKeyedScoped<IProductQueryModifier, ConnectionBend>("Трубка Г-образная") + .AddKeyedScoped<IProductQueryModifier, ConnectionTee>("Трубка Т-образная") + .AddKeyedScoped<IProductQueryModifier, EuroconeFlex>("Резьбозажимное flex") + .AddKeyedScoped<IProductQueryModifier, EuroconeStabil>("Резьбозажимное stabil") + .AddKeyedScoped<IProductQueryModifier, EuroconeAdapter>("Переходник на евроконус") + .AddKeyedScoped<IProductQueryModifier, EuroconeConnectionBend>("Резьбозажимное для трубки") + .AddKeyedScoped<IProductQueryModifier, Nippel>("Ниппель") + .AddKeyedScoped<IProductQueryModifier, DummyPlug>("Заглушка труб RAUTITAN") + .AddKeyedScoped<IProductQueryModifier, FlexPipe>("Flex") + .AddKeyedScoped<IProductQueryModifier, PinkPipe>("Pink") + .AddKeyedScoped<IProductQueryModifier, StabilPipe>("Stabil") + .AddKeyedScoped<IProductQueryModifier, BlackPipe>("Black"); + var app = builder.Build(); app.MapControllers(); diff --git a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ElbowModifier.cs b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Elbow.cs index a85b0d8..ff6a265 100644 --- a/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/ElbowModifier.cs +++ b/RhSolutions.QueryModifiers/DrinkingWaterHeatingFittings/Elbow.cs @@ -1,6 +1,6 @@ namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingFittings; -public class ElbowModifier : DrinkingWaterHeatingFitting +public class Elbow : DrinkingWaterHeatingFitting { protected override string _title { get; } = "Угольник RAUTITAN -PLATINUM"; |