using AsbCloudApp.Services; using AsbCloudDb.Model; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudInfrastructure.Repository; public class CrudWellRelatedCacheRepositoryBase<TDto, TEntity> : CrudCacheRepositoryBase<TDto, TEntity>, IRepositoryWellRelated<TDto> where TDto : AsbCloudApp.Data.IId, AsbCloudApp.Data.IWellRelated where TEntity : class, IId, IWellRelated { public CrudWellRelatedCacheRepositoryBase(IAsbCloudDbContext context, IMemoryCache memoryCache) : base(context, memoryCache) { } public CrudWellRelatedCacheRepositoryBase(IAsbCloudDbContext context, IMemoryCache memoryCache, Func<DbSet<TEntity>, IQueryable<TEntity>> makeQuery) : base(context, memoryCache, makeQuery) { } public async Task<IEnumerable<TDto>> GetByIdWellAsync(int idWell, CancellationToken token) { var cache = await GetCacheAsync(token); var dtos = cache .Where(e => e.IdWell == idWell) .Select(Convert); return dtos; } public async Task<IEnumerable<TDto>> GetByIdWellAsync(IEnumerable<int> idsWells, CancellationToken token) { if (!idsWells.Any()) return Enumerable.Empty<TDto>(); var cache = await GetCacheAsync(token); var dtos = cache .Where(e => idsWells.Contains(e.IdWell)) .Select(Convert); return dtos; } }