diff --git a/RhSolutions.Api/Services/AdapterExternalModifier.cs b/RhSolutions.Api/Services/AdapterExternalModifier.cs new file mode 100644 index 0000000..5943e70 --- /dev/null +++ b/RhSolutions.Api/Services/AdapterExternalModifier.cs @@ -0,0 +1,7 @@ +namespace RhSolutions.Api.Services +{ + public class AdapterExternalModifier : AdapterModifier + { + protected override string name => "Переходник с наружной резьбой"; + } +} diff --git a/RhSolutions.Api/Services/AdapterInternalModifier.cs b/RhSolutions.Api/Services/AdapterInternalModifier.cs new file mode 100644 index 0000000..b79ca96 --- /dev/null +++ b/RhSolutions.Api/Services/AdapterInternalModifier.cs @@ -0,0 +1,7 @@ +namespace RhSolutions.Api.Services +{ + public class AdapterInternalModifier : AdapterModifier + { + protected override string name => "Переходник с внутренней резьбой"; + } +} diff --git a/RhSolutions.Api/Services/AdapterModifier.cs b/RhSolutions.Api/Services/AdapterModifier.cs new file mode 100644 index 0000000..ac4be85 --- /dev/null +++ b/RhSolutions.Api/Services/AdapterModifier.cs @@ -0,0 +1,39 @@ + +using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Http.Extensions; + +namespace RhSolutions.Api.Services +{ + public abstract class AdapterModifier : IProductQueryModifier + { + protected string pattern { get; } = + @"(?\b16|20|25|32|40|50|63\b)\D+(?\b1\s+1/4|1\s+1/2|1/2|3/4|2|1\b)"; + protected virtual string name { get; } = string.Empty; + public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) + { + queryString = QueryString.Empty; + var query = collection["query"].ToString(); + if (string.IsNullOrEmpty(query)) + { + return false; + } + var matches = Regex.Matches(query, pattern); + if (matches.Count < 0) + { + return false; + } + else + { + var match = matches.First(); + var diameter = match.Groups["Diameter"].Captures.First(); + var thread = match.Groups["Thread"].Captures.First(); + QueryBuilder qb = new() + { + {"query", $"{name} {diameter} {thread}"} + }; + queryString = qb.ToQueryString(); + return true; + } + } + } +} diff --git a/RhSolutions.Api/Services/AdapterScrewcapModifier.cs b/RhSolutions.Api/Services/AdapterScrewcapModifier.cs new file mode 100644 index 0000000..2575bd5 --- /dev/null +++ b/RhSolutions.Api/Services/AdapterScrewcapModifier.cs @@ -0,0 +1,7 @@ +namespace RhSolutions.Api.Services +{ + public class AdapterScrewcapModifier : AdapterModifier + { + protected override string name => "Переходник с накидной гайкой"; + } +} diff --git a/RhSolutions.Api/Services/ProductQueryModifierFactory.cs b/RhSolutions.Api/Services/ProductQueryModifierFactory.cs index 5801999..ff9c487 100644 --- a/RhSolutions.Api/Services/ProductQueryModifierFactory.cs +++ b/RhSolutions.Api/Services/ProductQueryModifierFactory.cs @@ -1,4 +1,4 @@ -namespace RhSolutions.Api.Services; +namespace RhSolutions.Api.Services; public class ProductQueryModifierFactory { @@ -10,6 +10,12 @@ public class ProductQueryModifierFactory return new SleeveQueryModifier(); case "Тройник RAUTITAN": return new TPieceQueryModifier(); + case "Переходник на наружную резьбу": + return new AdapterExternalModifier(); + case "Переходник на внутреннюю резьбу": + return new AdapterInternalModifier(); + case "Переходник с накидной гайкой": + return new AdapterScrewcapModifier(); case "Муфта соединительная": return new CouplingModifier(); case "Flex":