summaryrefslogtreecommitdiff
path: root/RhSolutions.QueryModifiers/AdapterModifier.cs
blob: 0ebe40d6cfb93b101fc7656d61d3a47b7c3366a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;

namespace RhSolutions.QueryModifiers
{
    public abstract class AdapterModifier : IProductQueryModifier
	{
		protected string pattern { get; } =
			@"(?<Diameter>\b16|20|25|32|40|50|63\b)\D+(?<Thread>\b1\s+1/4|1\s+1/2|1/2|3/4|2|1\b)";
		protected virtual string name { get; } = string.Empty;
		public bool TryQueryModify(IQueryCollection collection, out QueryString queryString)
		{
			queryString = QueryString.Empty;
			var query = collection["query"].ToString();
			if (string.IsNullOrEmpty(query))
			{
				return false;
			}
			var matches = Regex.Matches(query, pattern);
			if (matches.Count == 0)
			{
				return false;
			}
			else
			{
				var match = matches.First();
				var diameter = match.Groups["Diameter"].Captures.First();
				var thread = match.Groups["Thread"].Captures.First();
				QueryBuilder qb = new()
				{
					{"query", $"{name} {diameter} {thread}"}
				};
				queryString = qb.ToQueryString();
				return true;
			}
		}
	}
}