using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using PARR.Core.Repositories.Interfaces.Unit; using PARR.DAL.Context; using PARR.DAL.Repositories.Base; namespace PARR.DAL.Repositories.Unit { internal class UnitRepository : BaseRepository, IUnitRepository { public UnitRepository(DataContext dataContext, ILogger logger) : base(logger, dataContext) { } public IQueryable GetWithIncludes() { return Get() .Include(t => t.UnitValues) .ThenInclude(t => t.Field) .Include(t => t.UnitValues) .ThenInclude(t => t.Value); } public IQueryable GetInitialUnitIds(string dbValueMask) { return Get().AsNoTracking() .Where(unit => EF.Functions.ILike(unit.Name, dbValueMask)) .Select(u => u.Id); } public async Task> FindUnitIdsByValueIdsAsync( IReadOnlyList unitIds, Guid fieldId, IReadOnlyList valueIds, CancellationToken ct = default) { if (valueIds.Count == 0) return new List(); return await EntitySet.AsNoTracking() .Where(u => unitIds.Contains(u.Id)) .Where(u => u.UnitValues.Any(uv => uv.FieldId == fieldId && valueIds.Contains(uv.ValueId))) .Select(u => u.Id) .ToListAsync(ct); } } }