diff options
Diffstat (limited to 'RhSolutions.QueryModifiers/AdapterModifier.cs')
-rw-r--r-- | RhSolutions.QueryModifiers/AdapterModifier.cs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/RhSolutions.QueryModifiers/AdapterModifier.cs b/RhSolutions.QueryModifiers/AdapterModifier.cs new file mode 100644 index 0000000..0ebe40d --- /dev/null +++ b/RhSolutions.QueryModifiers/AdapterModifier.cs @@ -0,0 +1,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; + } + } + } +} |