using System.Text; using System.Text.RegularExpressions; using Microsoft.AspNetCore.Http.Extensions; namespace RhSolutions.Api.Services { public class BlackPipeQueryModifier : FlexPipeQueryModifier { protected override string diameterPattern => @"16|20|25"; protected override string pipeName => "Black"; protected override Dictionary diameterNames => new() { ["16"] = "16х2,2", ["20"] = "20х2,8", ["25"] = "25х3,5" }; } public class FlexPipeQueryModifier : IProductQueryModifier { protected virtual string diameterPattern { get; } = @"16|20|25|32|40|50|63"; protected virtual string typePattern { get; } = @"(бухт)|(отр)"; protected virtual string pipeName { get; } = "Flex"; protected virtual Dictionary diameterNames { get; } = new() { ["16"] = "16x2,2", ["20"] = "20x2,8", ["25"] = "25x3,5", ["32"] = "32x4,4", ["40"] = "40x5,5", ["50"] = "50x6,9", ["63"] = "63x8,6" }; public bool TryQueryModify(IQueryCollection collection, out QueryString queryString) { queryString = QueryString.Empty; StringBuilder sb = new(); string query = collection["query"].ToString(); if (string.IsNullOrEmpty(query)) { return false; } sb.Append($"Труба {pipeName} "); var diameterMatches = Regex.Matches(query, diameterPattern); string diameter; if (diameterMatches.Count > 0) { diameter = diameterMatches.First().Value; sb.Append($"{diameterNames[diameter]} " ); } else { return false; } var typeMatches = Regex.Matches(query, typePattern); if (typeMatches.Count > 0) { var type = typeMatches.First().Value; if (type.StartsWith("бухт")) { sb.Append("бухта"); } else { sb.Append("прям.отрезки"); } } else if (int.Parse(diameter) < 32) { sb.Append("бухта"); } else { sb.Append("прям.отрезки"); } QueryBuilder qb = new() { { "query", sb.ToString() } }; queryString = qb.ToQueryString(); return true; } } }