From 68beb21f07a43bd225f8bcfa79fc0c5a4972b535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Michel?= Date: Sun, 31 Oct 2021 19:54:00 +0100 Subject: [PATCH] Feature/generic cached decorator (#604) * make TODO: Make a generic decorator for any LookupData type * remove useless GetById in ICatalogLookupDataService --- .../CachedCatalogBrandServiceDecorator.cs | 59 ------------------- ...achedCatalogLookupDataServiceDecorator .cs | 53 +++++++++++++++++ .../CachedCatalogTypeServiceDecorator.cs | 56 ------------------ .../Services/CatalogLookupDataService.cs | 5 -- src/BlazorAdmin/ServicesConfiguration.cs | 4 +- .../Interfaces/ICatalogLookupDataService.cs | 1 - 6 files changed, 55 insertions(+), 123 deletions(-) delete mode 100644 src/BlazorAdmin/Services/CachedCatalogBrandServiceDecorator.cs create mode 100644 src/BlazorAdmin/Services/CachedCatalogLookupDataServiceDecorator .cs delete mode 100644 src/BlazorAdmin/Services/CachedCatalogTypeServiceDecorator.cs diff --git a/src/BlazorAdmin/Services/CachedCatalogBrandServiceDecorator.cs b/src/BlazorAdmin/Services/CachedCatalogBrandServiceDecorator.cs deleted file mode 100644 index 740a1bb..0000000 --- a/src/BlazorAdmin/Services/CachedCatalogBrandServiceDecorator.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Blazored.LocalStorage; -using BlazorShared.Interfaces; -using BlazorShared.Models; -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace BlazorAdmin.Services -{ - public class CachedCatalogBrandServiceDecorator : ICatalogLookupDataService - { - // TODO: Make a generic decorator for any LookupData type - private readonly ILocalStorageService _localStorageService; - private readonly CatalogLookupDataService _catalogBrandService; - private ILogger _logger; - - public CachedCatalogBrandServiceDecorator(ILocalStorageService localStorageService, - CatalogLookupDataService catalogBrandService, - ILogger logger) - { - _localStorageService = localStorageService; - _catalogBrandService = catalogBrandService; - _logger = logger; - - } - - public async Task GetById(int id) - { - return (await List()).FirstOrDefault(x => x.Id == id); - } - - public async Task> List() - { - string key = "brands"; - var cacheEntry = await _localStorageService.GetItemAsync>>(key); - if (cacheEntry != null) - { - _logger.LogInformation("Loading brands from local storage."); - // TODO: Get Default Cache Duration from Config - if (cacheEntry.DateCreated.AddMinutes(1) > DateTime.UtcNow) - { - return cacheEntry.Value; - } - else - { - _logger.LogInformation("Cache expired; removing brands from local storage."); - await _localStorageService.RemoveItemAsync(key); - } - } - - var brands = await _catalogBrandService.List(); - var entry = new CacheEntry>(brands); - await _localStorageService.SetItemAsync(key, entry); - return brands; - } - } -} diff --git a/src/BlazorAdmin/Services/CachedCatalogLookupDataServiceDecorator .cs b/src/BlazorAdmin/Services/CachedCatalogLookupDataServiceDecorator .cs new file mode 100644 index 0000000..aa93621 --- /dev/null +++ b/src/BlazorAdmin/Services/CachedCatalogLookupDataServiceDecorator .cs @@ -0,0 +1,53 @@ +using Blazored.LocalStorage; +using BlazorShared.Interfaces; +using BlazorShared.Models; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace BlazorAdmin.Services +{ + public class CachedCatalogLookupDataServiceDecorator + : ICatalogLookupDataService + where TLookupData : LookupData + where TReponse : ILookupDataResponse + { + private readonly ILocalStorageService _localStorageService; + private readonly CatalogLookupDataService _catalogTypeService; + private ILogger> _logger; + + public CachedCatalogLookupDataServiceDecorator(ILocalStorageService localStorageService, + CatalogLookupDataService catalogTypeService, + ILogger> logger) + { + _localStorageService = localStorageService; + _catalogTypeService = catalogTypeService; + _logger = logger; + } + + public async Task> List() + { + string key = typeof(TLookupData).Name; + var cacheEntry = await _localStorageService.GetItemAsync>>(key); + if (cacheEntry != null) + { + _logger.LogInformation($"Loading {key} from local storage."); + if (cacheEntry.DateCreated.AddMinutes(1) > DateTime.UtcNow) + { + return cacheEntry.Value; + } + else + { + _logger.LogInformation($"Cache expired; removing {key} from local storage."); + await _localStorageService.RemoveItemAsync(key); + } + } + + var types = await _catalogTypeService.List(); + var entry = new CacheEntry>(types); + await _localStorageService.SetItemAsync(key, entry); + return types; + } + } +} diff --git a/src/BlazorAdmin/Services/CachedCatalogTypeServiceDecorator.cs b/src/BlazorAdmin/Services/CachedCatalogTypeServiceDecorator.cs deleted file mode 100644 index d61e8b8..0000000 --- a/src/BlazorAdmin/Services/CachedCatalogTypeServiceDecorator.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Blazored.LocalStorage; -using BlazorShared.Interfaces; -using BlazorShared.Models; -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace BlazorAdmin.Services -{ - public class CachedCatalogTypeServiceDecorator : ICatalogLookupDataService - { - private readonly ILocalStorageService _localStorageService; - private readonly CatalogLookupDataService _catalogTypeService; - private ILogger _logger; - - public CachedCatalogTypeServiceDecorator(ILocalStorageService localStorageService, - CatalogLookupDataService catalogTypeService, - ILogger logger) - { - _localStorageService = localStorageService; - _catalogTypeService = catalogTypeService; - _logger = logger; - } - - public async Task GetById(int id) - { - return (await List()).FirstOrDefault(x => x.Id == id); - } - - public async Task> List() - { - string key = "types"; - var cacheEntry = await _localStorageService.GetItemAsync>>(key); - if (cacheEntry != null) - { - _logger.LogInformation("Loading types from local storage."); - if (cacheEntry.DateCreated.AddMinutes(1) > DateTime.UtcNow) - { - return cacheEntry.Value; - } - else - { - _logger.LogInformation("Cache expired; removing types from local storage."); - await _localStorageService.RemoveItemAsync(key); - } - } - - var types = await _catalogTypeService.List(); - var entry = new CacheEntry>(types); - await _localStorageService.SetItemAsync(key, entry); - return types; - } - } -} diff --git a/src/BlazorAdmin/Services/CatalogLookupDataService.cs b/src/BlazorAdmin/Services/CatalogLookupDataService.cs index b2a2639..bd07459 100644 --- a/src/BlazorAdmin/Services/CatalogLookupDataService.cs +++ b/src/BlazorAdmin/Services/CatalogLookupDataService.cs @@ -31,11 +31,6 @@ namespace BlazorAdmin.Services _apiUrl = baseUrlConfiguration.ApiBase; } - public async Task GetById(int id) - { - return (await List()).FirstOrDefault(x => x.Id == id); - } - public async Task> List() { var endpointName = typeof(TLookupData).GetCustomAttribute().Name; diff --git a/src/BlazorAdmin/ServicesConfiguration.cs b/src/BlazorAdmin/ServicesConfiguration.cs index 31dd1bb..e95b183 100644 --- a/src/BlazorAdmin/ServicesConfiguration.cs +++ b/src/BlazorAdmin/ServicesConfiguration.cs @@ -9,9 +9,9 @@ namespace BlazorAdmin { public static IServiceCollection AddBlazorServices(this IServiceCollection services) { - services.AddScoped, CachedCatalogBrandServiceDecorator>(); + services.AddScoped, CachedCatalogLookupDataServiceDecorator>(); services.AddScoped>(); - services.AddScoped, CachedCatalogTypeServiceDecorator>(); + services.AddScoped, CachedCatalogLookupDataServiceDecorator>(); services.AddScoped>(); services.AddScoped(); services.AddScoped(); diff --git a/src/BlazorShared/Interfaces/ICatalogLookupDataService.cs b/src/BlazorShared/Interfaces/ICatalogLookupDataService.cs index 3d973fc..00106f4 100644 --- a/src/BlazorShared/Interfaces/ICatalogLookupDataService.cs +++ b/src/BlazorShared/Interfaces/ICatalogLookupDataService.cs @@ -7,6 +7,5 @@ namespace BlazorShared.Interfaces public interface ICatalogLookupDataService where TLookupData : LookupData { Task> List(); - Task GetById(int id); } }