78 lines
2.3 KiB
C#
78 lines
2.3 KiB
C#
|
using System.Text.RegularExpressions;
|
|||
|
using Microsoft.AspNetCore.Http;
|
|||
|
using Microsoft.AspNetCore.Http.Extensions;
|
|||
|
|
|||
|
namespace RhSolutions.QueryModifiers.DrinkingWaterHeatingPipes;
|
|||
|
|
|||
|
public class DrinkingWaterHeatingPipe : IProductQueryModifier
|
|||
|
{
|
|||
|
protected static readonly Regex _diameter =
|
|||
|
new(@"([\b\D]|^)?(?<Diameter>16|20|25|32|40|50|63)([\b\D]|$)");
|
|||
|
protected static readonly Regex _type =
|
|||
|
new(@"([\b\W])(?<Type>бухт|отр|штанг)([\b\w.])");
|
|||
|
protected virtual string _title { get; } = string.Empty;
|
|||
|
|
|||
|
protected virtual Dictionary<int, 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> _makeUp { get; } = new()
|
|||
|
{
|
|||
|
["бухт"] = "бухта",
|
|||
|
["штанг"] = "прям.отрезки",
|
|||
|
["отр"] = "прям.отрезки"
|
|||
|
};
|
|||
|
|
|||
|
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;
|
|||
|
}
|
|||
|
|
|||
|
protected virtual string? BuildRhSolutionsName(string query)
|
|||
|
{
|
|||
|
var diameterMatch = _diameter.Match(query);
|
|||
|
if (!diameterMatch.Success)
|
|||
|
{
|
|||
|
return null;
|
|||
|
}
|
|||
|
var diameter = int.Parse(diameterMatch.Groups["Diameter"].Value);
|
|||
|
var typeMatch = _type.Match(query);
|
|||
|
if (typeMatch.Success)
|
|||
|
{
|
|||
|
var type = typeMatch.Groups["Type"].Value;
|
|||
|
return $"Труба {_title} {_diameterNames[diameter]} {_makeUp[type]}";
|
|||
|
}
|
|||
|
else if (diameter < 32)
|
|||
|
{
|
|||
|
return $"Труба {_title} {_diameterNames[diameter]} {_makeUp["бухт"]}";
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
return $"Труба {_title} {_diameterNames[diameter]} {_makeUp["отр"]}";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|