From 355e2d36729b607c80b75a4e78342ed487cc56d4 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Fri, 3 Dec 2021 22:25:20 +0300 Subject: [PATCH] Add RAUPRICE function. Refactoring. --- Source/Assistant/IProduct.cs | 5 ++- Source/Assistant/SkuAssist.cs | 53 ++++++++++++++++++++++++++++++- Source/ExcelDNA/Functions.cs | 59 +++-------------------------------- Tests/SkuAssistTests.cs | 20 ++++++------ 4 files changed, 69 insertions(+), 68 deletions(-) diff --git a/Source/Assistant/IProduct.cs b/Source/Assistant/IProduct.cs index 54b3dd0..d5db286 100644 --- a/Source/Assistant/IProduct.cs +++ b/Source/Assistant/IProduct.cs @@ -1,10 +1,9 @@ -using System; - -namespace Rehau.Sku.Assist +namespace Rehau.Sku.Assist { interface IProduct { string Id { get; } string Name { get; } + string Price { get; } } } diff --git a/Source/Assistant/SkuAssist.cs b/Source/Assistant/SkuAssist.cs index b6b5f7e..fd69a5b 100644 --- a/Source/Assistant/SkuAssist.cs +++ b/Source/Assistant/SkuAssist.cs @@ -1,7 +1,9 @@ using AngleSharp.Dom; +using ExcelDna.Integration; using Newtonsoft.Json; using System; using System.Linq; +using System.Runtime.Caching; using System.Text.RegularExpressions; using System.Threading.Tasks; @@ -16,6 +18,13 @@ namespace Rehau.Sku.Assist Series } + public enum ProductField + { + Name, + Id, + Price + } + static class SkuAssist { public static async Task GetProduct(string request) @@ -43,10 +52,52 @@ namespace Rehau.Sku.Assist IProduct product = storeResponse .Ecommerce .Impressions - .Where(i => Regex.IsMatch(i.Id, @"\d{11}", RegexOptions.None)) + .Where(p => Regex.IsMatch(p.Id, @"\d{11}", RegexOptions.None)) .FirstOrDefault(); return product; } + + public static object GetProduct(string request, ProductField field) + { + IProduct product; + + if (MemoryCache.Default.Contains(request)) + { + product = MemoryCache.Default[request] as IProduct; + } + + else + { + object result = ExcelAsyncUtil.Run("RauName", new[] { request }, + delegate + { + Task p = Task.Run(() => GetProduct(request)); + return p.Result; + }); + + if (result == null) + return "Не найдено"; + + if (result.Equals(ExcelError.ExcelErrorNA)) + return "Загрузка..."; + + product = result as IProduct; + MemoryCache.Default.Add(request, product, DateTime.Now.AddMinutes(10)); + return product.Name; + } + + switch (field) + { + case ProductField.Name: + return product.Name; + case ProductField.Id: + return product.Id; + case ProductField.Price: + return product.Price; + default: + return ExcelError.ExcelErrorValue; + } + } } } \ No newline at end of file diff --git a/Source/ExcelDNA/Functions.cs b/Source/ExcelDNA/Functions.cs index 9ce4429..a9bdfca 100644 --- a/Source/ExcelDNA/Functions.cs +++ b/Source/ExcelDNA/Functions.cs @@ -1,6 +1,4 @@ using ExcelDna.Integration; -using System.Runtime.Caching; -using System.Threading.Tasks; namespace Rehau.Sku.Assist { @@ -8,61 +6,14 @@ namespace Rehau.Sku.Assist { [ExcelFunction] public static object RAUNAME(string request) - { - if (MemoryCache.Default.Contains(request)) - { - IProduct product = MemoryCache.Default[request] as IProduct; - return product.Name; - } - - else - { - object result = ExcelAsyncUtil.Run("RauName", new[] { request }, - delegate - { - Task p = Task.Run(() => SkuAssist.GetProduct(request)); - return p.Result; - }); - - if (result == null) - return "Не найдено"; - - if (result.Equals(ExcelError.ExcelErrorNA)) - return "Загрузка..."; - - IProduct product = result as IProduct; - MemoryCache.Default.Add(request, product, System.DateTime.Now.AddMinutes(10)); - return product.Name; - } - } + => SkuAssist.GetProduct(request, ProductField.Name); [ExcelFunction] public static object RAUSKU(string request) - { - if (MemoryCache.Default.Contains(request)) - { - IProduct product = MemoryCache.Default[request] as IProduct; - return product.Id; - } - else - { - object result = ExcelAsyncUtil.Run("RauSku", new[] { request }, - delegate - { - Task p = Task.Run(() => SkuAssist.GetProduct(request)); - return p.Result; - }); + => SkuAssist.GetProduct(request, ProductField.Id); - if (result == null) - return "Не найдено"; - - if (result.Equals(ExcelError.ExcelErrorNA)) - return "Загрузка..."; - - IProduct product = result as IProduct; - MemoryCache.Default.Add(request, product, System.DateTime.Now.AddMinutes(10)); - return product.Id; - } - } + [ExcelFunction] + public static object RAUPRICE(string request) + => SkuAssist.GetProduct(request, ProductField.Price); } } \ No newline at end of file diff --git a/Tests/SkuAssistTests.cs b/Tests/SkuAssistTests.cs index d70ac1c..19f8a0c 100644 --- a/Tests/SkuAssistTests.cs +++ b/Tests/SkuAssistTests.cs @@ -2,14 +2,14 @@ namespace Rehau.Sku.Assist.Tests { - //[TestFixture] - //public class SkuAssistTests - //{ - // [Test] - // public async void BaseTest() - // { - // var result = await Functions.RAUNAME("160001"); - // Assert.AreEqual("Надвижная гильза REHAU RAUTITAN РХ (11600011001)", result); - // } - //} + [TestFixture] + public class SkuAssistTests + { + [Test] + public static void BaseTest() + { + var result = Functions.RAUNAME("160001"); + Assert.AreEqual("Надвижная гильза REHAU RAUTITAN РХ (11600011001)", result); + } + } }