0
0
RhSolutions-Api/RhSolutions.QueryModifiers/PipeQueryModifier.cs

60 lines
1.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
namespace RhSolutions.QueryModifiers;
public class PipeQueryModifier : IProductQueryModifier
{
protected virtual string diameterPattern { get; } = @"([\b\D]|^)(?<Diameter>16|20|25|32|40|50|63)([\b\D]|$)";
protected virtual string typePattern { get; } = @"бухт|отр|штанг";
protected virtual string pipeName { get; } = "Flex";
protected virtual Dictionary<string, string> diameterNames { get; } = new()
{
["16"] = "16x2,2",
["20"] = "20x2,8",
["25"] = "25x3,5",
["32"] = "32x4,4",
["40"] = "40x5,5",
["50"] = "50x6,9",
["63"] = "63x8,6"
};
protected virtual Dictionary<string, string> makeUpNames { get; } = new()
{
["бухт"] = "бухта",
["штанг"] = "прям.отрезки",
["отр"] = "прям.отрезки"
};
public bool TryQueryModify(IQueryCollection collection, out QueryString queryString)
{
queryString = QueryString.Empty;
string query = collection["query"].ToString();
if (string.IsNullOrEmpty(query))
{
return false;
}
var diameterMatches = Regex.Matches(query, diameterPattern);
if (diameterMatches.Count == 0)
{
return false;
}
var typeMatches = Regex.Matches(query, typePattern);
var diameter = diameterMatches.First().Groups["Diameter"].Value;
string? type = typeMatches.FirstOrDefault()?.Value;
string result =
$"Труба {pipeName} {diameterNames[diameter]} {(type != null ? makeUpNames[type] : int.Parse(diameter) < 32 ? makeUpNames["бухт"] : makeUpNames["отр"])}";
QueryBuilder qb = new()
{
{ "query", result }
};
queryString = qb.ToQueryString();
return true;
}
}