feat(unitFilter): Оптимизация фильрации юнитов. Проверка значений аттрибутов теперь выполняется в 2 запроса:

- проверяем доступные в базе значения
- проверяем наличие значений в юнитах по id значений
This commit is contained in:
Mikhail Kuznetsov
2026-07-28 16:34:04 +10:00
parent 556d895c7c
commit 343468cf71
11 changed files with 1529 additions and 281 deletions

View File

@@ -3,8 +3,8 @@ using PARR.Domain.Entities.Unit;
namespace PARR.Core.Repositories.Interfaces.Unit
{
public interface IUnitFieldValueRepository: IBaseRepository<UnitFieldValue>
public interface IUnitFieldValueRepository : IBaseRepository<UnitFieldValue>
{
Task<UnitFieldValue?> GetByValueNameAsync(string? value);
Task<List<Guid>> FindValueIdsByMaskAsync(string mask, CancellationToken ct = default);
}
}

View File

@@ -4,18 +4,18 @@ namespace PARR.Core.Repositories.Interfaces.Unit
{
public interface IUnitRepository : IBaseRepository<Domain.Entities.Unit.Unit>
{
/// <summary>
/// Поиск юнитов по списку ID значений.
/// Используется для эффективной фильтрации после предварительного поиска ValueId.
/// </summary>
Task<List<Guid>> FindUnitIdsByValueIdsAsync(
IReadOnlyList<Guid> unitIds,
Guid fieldId,
IReadOnlyList<Guid> valueIds,
CancellationToken ct = default);
IQueryable<Guid> GetInitialUnitIds(string dbValueMask);
/// <summary>
/// Получить юниты по Id атрибута и маски значения
/// </summary>
/// <param name="query"></param>
/// <param name="fieldId"></param>
/// <param name="valueMask"></param>
/// <param name="isInverse">true - не содержит, false - содержит</param>
/// <returns></returns>
IQueryable<Domain.Entities.Unit.Unit> GetUnitByFieldAndValue(IQueryable<Domain.Entities.Unit.Unit> query, Guid fieldId, string valueMask, bool isInverse = false);
IQueryable<Domain.Entities.Unit.Unit> GetWithIncludes();
}
}