From ba75f2c8883baae4dd3570d1eb611f2aafb6c791 Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Fri, 13 Dec 2024 10:54:47 +0500 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=B4=D0=B5=D0=BB=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20Cached=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=BC=20-=20=D0=B8=D1=81=D1=82=D0=BE=D1=87=D0=BD?= =?UTF-8?q?=D0=B8=D0=BA=D0=BE=D0=B2=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Persistence.Repository/DependencyInjection.cs | 2 +- .../DataSourceSystemCachedRepository.cs | 34 +++++++++++++++++++ .../DataSourceSystemRepository.cs | 29 +++++----------- .../Repositories/TechMessagesRepository.cs | 33 +++++------------- 4 files changed, 51 insertions(+), 47 deletions(-) create mode 100644 Persistence.Repository/Repositories/DataSourceSystemCachedRepository.cs diff --git a/Persistence.Repository/DependencyInjection.cs b/Persistence.Repository/DependencyInjection.cs index 2b8c06a..a7db05e 100644 --- a/Persistence.Repository/DependencyInjection.cs +++ b/Persistence.Repository/DependencyInjection.cs @@ -34,7 +34,7 @@ public static class DependencyInjection services.AddTransient(); services.AddTransient(); services.AddTransient(); - services.AddTransient(); + services.AddTransient(); return services; } diff --git a/Persistence.Repository/Repositories/DataSourceSystemCachedRepository.cs b/Persistence.Repository/Repositories/DataSourceSystemCachedRepository.cs new file mode 100644 index 0000000..11a08dd --- /dev/null +++ b/Persistence.Repository/Repositories/DataSourceSystemCachedRepository.cs @@ -0,0 +1,34 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using Persistence.Models; + +namespace Persistence.Repository.Repositories; +public class DataSourceSystemCachedRepository : DataSourceSystemRepository +{ + private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; + private readonly IMemoryCache memoryCache; + private const int CacheExpirationInMinutes = 60; + + public DataSourceSystemCachedRepository(DbContext db, IMemoryCache memoryCache) : base(db) + { + this.memoryCache = memoryCache; + } + public override async Task Add(DataSourceSystemDto dataSourceSystemDto, CancellationToken token) + { + await base.Add(dataSourceSystemDto, token); + + memoryCache.Remove(SystemCacheKey); + } + + public override async Task> Get(CancellationToken token) + { + var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async f => + { + var dtos = await base.Get(token); + + return dtos; + }); + + return systems ?? []; + } +} diff --git a/Persistence.Repository/Repositories/DataSourceSystemRepository.cs b/Persistence.Repository/Repositories/DataSourceSystemRepository.cs index 174a1af..9fade43 100644 --- a/Persistence.Repository/Repositories/DataSourceSystemRepository.cs +++ b/Persistence.Repository/Repositories/DataSourceSystemRepository.cs @@ -14,40 +14,27 @@ using Persistence.Repositories; namespace Persistence.Repository.Repositories; public class DataSourceSystemRepository : IDataSourceSystemRepository { - private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; - private DbContext db; - private readonly IMemoryCache memoryCache; - private const int CacheExpirationInMinutes = 60; - public DataSourceSystemRepository(DbContext db, IMemoryCache memoryCache) + protected DbContext db; + public DataSourceSystemRepository(DbContext db) { this.db = db; - this.memoryCache = memoryCache; } protected virtual IQueryable GetQueryReadOnly() => db.Set(); - public async Task Add(DataSourceSystemDto dataSourceSystemDto, CancellationToken token) + public virtual async Task Add(DataSourceSystemDto dataSourceSystemDto, CancellationToken token) { var entity = dataSourceSystemDto.Adapt(); await db.Set().AddAsync(entity); await db.SaveChangesAsync(token); - - memoryCache.Remove(SystemCacheKey); } - public async Task> Get(CancellationToken token) + public virtual async Task> Get(CancellationToken token) { - var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async f => - { - f.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(CacheExpirationInMinutes); + var query = GetQueryReadOnly(); + var entities = await query.ToListAsync(token); + var dtos = entities.Select(e => e.Adapt()); - var query = GetQueryReadOnly(); - var entities = await query.ToListAsync(token); - var dtos = entities.Select(e => e.Adapt()); - - return dtos; - }); - - return systems ?? []; + return dtos; } } diff --git a/Persistence.Repository/Repositories/TechMessagesRepository.cs b/Persistence.Repository/Repositories/TechMessagesRepository.cs index 6ba7ff9..f542265 100644 --- a/Persistence.Repository/Repositories/TechMessagesRepository.cs +++ b/Persistence.Repository/Repositories/TechMessagesRepository.cs @@ -12,15 +12,13 @@ namespace Persistence.Repository.Repositories { public class TechMessagesRepository : ITechMessagesRepository { - private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; - private const int CacheExpirationInMinutes = 60; - private readonly IMemoryCache memoryCache; + private readonly IDataSourceSystemRepository sourceSystemRepository; private DbContext db; - public TechMessagesRepository(DbContext db, IMemoryCache memoryCache) + public TechMessagesRepository(DbContext db, IDataSourceSystemRepository sourceSystemRepository) { - this.memoryCache = memoryCache; this.db = db; + this.sourceSystemRepository = sourceSystemRepository; } protected virtual IQueryable GetQueryReadOnly() => db.Set() @@ -116,18 +114,9 @@ namespace Persistence.Repository.Repositories public async Task> GetSystems(CancellationToken token) { - var systems = await memoryCache.GetOrCreateAsync(SystemCacheKey, async f => - { - f.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(CacheExpirationInMinutes); + var systems = await sourceSystemRepository.Get(token); - var query = db.Set(); - var entities = await query.ToListAsync(token); - var dtos = entities.Select(e => e.Adapt()); - - return dtos; - }); - - return systems ?? []; + return systems ?? []; } public async Task GetDatesRangeAsync(CancellationToken token) @@ -151,7 +140,7 @@ namespace Persistence.Repository.Repositories private async Task CreateSystemIfNotExist(Guid systemId, CancellationToken token) { - var systems = await GetSystems(token); + var systems = await sourceSystemRepository.Get(token); var system = systems?.FirstOrDefault(e => e.SystemId == systemId); if (system == null) @@ -161,14 +150,8 @@ namespace Persistence.Repository.Repositories SystemId = systemId, Name = string.Empty }; - - var entity = system.Adapt(); - - await db.Set().AddAsync(entity); - await db.SaveChangesAsync(token); - - memoryCache.Remove(SystemCacheKey); - } + await sourceSystemRepository.Add(system, token); + } } } }