51 lines
1.3 KiB
C#
51 lines
1.3 KiB
C#
|
||
using System.Text.RegularExpressions;
|
||
using Microsoft.AspNetCore.Http.Extensions;
|
||
|
||
namespace RhSolutions.Api.Services;
|
||
|
||
public class ThreadTPieceWall : IProductQueryModifier
|
||
{
|
||
private string diameterPattern = "16|20|25|32|40|50|63";
|
||
private string threadPattern = @"(\D|^)(?<Thread>1\s+1/4|1\s+1/2|1/2|3/4|2|1)(\D|$)";
|
||
|
||
public bool TryQueryModify(IQueryCollection collection, out QueryString queryString)
|
||
{
|
||
queryString = QueryString.Empty;
|
||
var query = collection["query"].ToString();
|
||
if (string.IsNullOrEmpty(query))
|
||
{
|
||
return false;
|
||
}
|
||
var diameters = Regex.Matches(query, diameterPattern);
|
||
if (diameters.Count == 0)
|
||
{
|
||
return false;
|
||
}
|
||
var thread = Regex.Match(query, threadPattern);
|
||
if (!thread.Success)
|
||
{
|
||
return false;
|
||
}
|
||
QueryBuilder qb = new()
|
||
{
|
||
{"query", ConstructName(diameters, thread)}
|
||
};
|
||
queryString = qb.ToQueryString();
|
||
return true;
|
||
}
|
||
|
||
protected virtual string ConstructName(MatchCollection diameters, Match thread)
|
||
{
|
||
Capture t = thread.Groups["Thread"].Captures.First();
|
||
if (diameters.Count == 1)
|
||
{
|
||
return $"Тройник настенный с внутренней резьбой {diameters[0]}-Rp{t}-{diameters[0]}";
|
||
}
|
||
else
|
||
{
|
||
return $"Тройник настенный с внутренней резьбой {diameters[0]}-Rp{t}-{diameters[1]}";
|
||
}
|
||
}
|
||
}
|