From 6fe0a5e92b071411a0408d59d54d0de78e55d75c Mon Sep 17 00:00:00 2001 From: Serghei Cebotari Date: Sun, 21 Jul 2024 16:25:59 +0300 Subject: Squashed commit of the following: commit 688c5426e8793b808b9c75c9a19733af0a402fcb Author: Serghei Cebotari Date: Sun Jul 21 16:25:14 2024 +0300 Switch to port 8080 commit c39249f6528ec76686a9382d1dc375c07d1d5044 Author: Serghei Cebotari Date: Sun Jul 21 16:24:59 2024 +0300 Switch to alpine image commit 5318d7ec3f4f3d205549cf6732fa5b066a1d0a36 Author: Serghei Cebotari Date: Sun Jul 21 15:40:14 2024 +0300 Add docker commit b6cd60a973da26bc92cf1fb45b4d2396b7ce56ea Author: Serghei Cebotari Date: Sun Jul 21 15:00:12 2024 +0300 Delete asynchrony commit 44a194e6d27312f3b8dd0b9c9c02d873e06e0b22 Author: Serghei Cebotari Date: Sun Jul 21 14:59:29 2024 +0300 Add Equals and GetHasCode methods overrides to ProductQuantity class commit a274eadd313e12f11cc84d32e5030bbc5b187f8c Author: Serghei Cebotari Date: Sun Jul 21 14:58:37 2024 +0300 Add parsers tests commit 4f969e70d9716d8ddb4f4efedd466846289d7e2b Author: Serghei Cebotari Date: Sun Jul 21 14:57:55 2024 +0300 Update product tests commit 2485e20d0e93bed562f929055b6867dc2574a95b Author: Serghei Cebotari Date: Sat Jul 20 19:34:19 2024 +0300 Implement Excel parser commit 30f2e28c87a4d961c1f1fc48fbd72334905bf4ed Author: Serghei Cebotari Date: Sat Jul 20 16:58:35 2024 +0300 Implement csv parser commit 08e86b43c0829de341dc3d24fbe01aadbed2e173 Author: Serghei Cebotari Date: Thu Jul 18 21:01:28 2024 +0300 Edit port number --- RhSolutions.SkuParser.Api/Models/Product.cs | 65 ++++++++++++++++++++++ .../Models/ProductQuantity.cs | 30 ++++++++++ 2 files changed, 95 insertions(+) create mode 100644 RhSolutions.SkuParser.Api/Models/Product.cs create mode 100644 RhSolutions.SkuParser.Api/Models/ProductQuantity.cs (limited to 'RhSolutions.SkuParser.Api/Models') diff --git a/RhSolutions.SkuParser.Api/Models/Product.cs b/RhSolutions.SkuParser.Api/Models/Product.cs new file mode 100644 index 0000000..fd9ea45 --- /dev/null +++ b/RhSolutions.SkuParser.Api/Models/Product.cs @@ -0,0 +1,65 @@ +using System.Text.RegularExpressions; + +namespace RhSolutions.SkuParser.Models; + +public record Product +{ + /// + /// Артикул РЕХАУ в заданном формате + /// + public required string Sku + { + get => _sku; + set + { + _sku = IsValudSku(value) + ? value + : throw new ArgumentException("$Неверный артикул: {value}"); + } + } + private string _sku = string.Empty; + private const string _parsePattern = @"(?[1\s]|^|\b)(?
\d{6})(?[\s13-])(?\d{3})(\b|$)"; + private const string _validnessPattern = @"^1\d{6}[1|3]\d{3}$"; + + private static bool IsValudSku(string value) + { + return Regex.IsMatch(value.Trim(), _validnessPattern); + } + private static string GetSku(Match match) + { + string lead = match.Groups["Lead"].Value; + string article = match.Groups["Article"].Value; + string delimiter = match.Groups["Delimiter"].Value; + string variant = match.Groups["Variant"].Value; + + if (lead != "1" && delimiter == "-") + { + return $"1{article}1{variant}"; + } + else + { + return $"{lead}{article}{delimiter}{variant}"; + } + } + + /// + /// Проверка строки на наличие в ней артикула РЕХАУ + /// + /// Входная строка для проверки + /// Артикул, если найден. null - если нет + /// Если артикул в строке есть возвращает true, Если нет - false + public static bool TryParse(string value, out Product? product) + { + product = null; + MatchCollection matches = Regex.Matches(value, _parsePattern); + if (matches.Count == 0) + { + return false; + } + string sku = GetSku(matches.First()); + product = new Product() { Sku = sku }; + return true; + } + public override int GetHashCode() => Sku.GetHashCode(); + public override string ToString() => Sku; +} \ No newline at end of file diff --git a/RhSolutions.SkuParser.Api/Models/ProductQuantity.cs b/RhSolutions.SkuParser.Api/Models/ProductQuantity.cs new file mode 100644 index 0000000..b7b154d --- /dev/null +++ b/RhSolutions.SkuParser.Api/Models/ProductQuantity.cs @@ -0,0 +1,30 @@ +using CsvHelper.Configuration.Attributes; + +namespace RhSolutions.SkuParser.Models; + +public class ProductQuantity +{ + [Index(0)] + public required Product Product { get; set; } + [Index(1)] + public required double Quantity { get; set; } + + public override bool Equals(object? obj) + { + if (obj == null || GetType() != obj.GetType()) + { + return false; + } + ProductQuantity other = (ProductQuantity)obj; + return Product == other.Product && + Quantity == other.Quantity; + } + + public override int GetHashCode() + { + HashCode hash = new(); + hash.Add(Product); + hash.Add(Quantity); + return hash.ToHashCode(); + } +} -- cgit v1.2.3