aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RhSolutions.AddIn/Services/DatabaseClient.cs64
1 files changed, 45 insertions, 19 deletions
diff --git a/RhSolutions.AddIn/Services/DatabaseClient.cs b/RhSolutions.AddIn/Services/DatabaseClient.cs
index efcf607..28caa09 100644
--- a/RhSolutions.AddIn/Services/DatabaseClient.cs
+++ b/RhSolutions.AddIn/Services/DatabaseClient.cs
@@ -21,36 +21,62 @@ public class DatabaseClient : IDatabaseClient
public async Task<IEnumerable<Product>> GetProducts(string line)
{
string request;
+ IEnumerable<Product> products;
if (ProductSku.TryParse(line, out var skus))
{
- request = @"https://rh.cebotari.ru/api/products/" + skus.FirstOrDefault().ToString();
+ ProductSku sku = skus.FirstOrDefault();
+ request = @"https://rh.cebotari.ru/api/products/" + sku.ToString();
+
+ if (!_memoryCache.TryGetValue(sku, out products))
+ {
+ var response = await _httpClient.GetAsync(request);
+
+ try
+ {
+ response.EnsureSuccessStatusCode();
+ string json = await response.Content.ReadAsStringAsync();
+ products = JsonConvert.DeserializeObject<IEnumerable<Product>>(json) ?? Enumerable.Empty<Product>();
+ }
+ catch
+ {
+ StatusCode = response.StatusCode;
+ }
+
+ var cacheEntryOptions = new MemoryCacheEntryOptions()
+ .SetSlidingExpiration(TimeSpan.FromHours(1));
+ _memoryCache.Set(sku, products, cacheEntryOptions);
+ }
}
else
{
request = @"https://rh.cebotari.ru/api/search?query=" + line;
- }
+
+ if (!_memoryCache.TryGetValue(line, out products))
+ {
+ var response = await _httpClient.GetAsync(request);
- if (!_memoryCache.TryGetValue(line, out IEnumerable<Product> products))
- {
- var response = await _httpClient.GetAsync(request);
+ try
+ {
+ response.EnsureSuccessStatusCode();
+ string json = await response.Content.ReadAsStringAsync();
+ products = JsonConvert.DeserializeObject<IEnumerable<Product>>(json) ?? Enumerable.Empty<Product>();
+ }
+ catch
+ {
+ StatusCode = response.StatusCode;
+ }
- try
- {
- response.EnsureSuccessStatusCode();
- string json = await response.Content.ReadAsStringAsync();
- products = JsonConvert.DeserializeObject<IEnumerable<Product>>(json) ?? Enumerable.Empty<Product>();
- }
- catch
- {
- StatusCode = response.StatusCode;
+ var cacheEntryOptions = new MemoryCacheEntryOptions()
+ .SetSlidingExpiration(TimeSpan.FromHours(1));
+ _memoryCache.Set(line, products, cacheEntryOptions);
+ if (products.Count() > 0)
+ {
+ _memoryCache.Set(products.First(), products, cacheEntryOptions);
+ }
}
-
- var cacheEntryOptions = new MemoryCacheEntryOptions()
- .SetSlidingExpiration(TimeSpan.FromHours(1));
- _memoryCache.Set(line, products, cacheEntryOptions);
- }
+ }
return products;
}