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]}";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|