using DD.Persistence.Database.EntityAbstractions; using DD.Persistence.Extensions; using DD.Persistence.Models.Common; using DD.Persistence.Models.Requests; using Microsoft.EntityFrameworkCore; namespace DD.Persistence.Database.Postgres.Helpers; /// /// класс с набором методов, необходимых для фильтрации записей /// public static class QueryBuilders { public static IQueryable Apply(this IQueryable query, DateTimeOffset momentUtc) where TEntity : class, IChangeLog { momentUtc = momentUtc.ToUniversalTime(); query = query .Where(e => e.Creation <= momentUtc) .Where(e => e.Obsolete == null || e.Obsolete >= momentUtc); return query; } public static async Task> ApplyPagination( this IQueryable query, PaginationRequest request, Func Convert, CancellationToken token) where TEntity : class where TDto : class { if (!String.IsNullOrEmpty(request.SortSettings)) { query = query.SortBy(request.SortSettings); } var entities = await query .Skip(request.Skip) .Take(request.Take) .ToArrayAsync(token); var count = await query.CountAsync(token); var items = entities.Select(Convert); var result = new PaginationContainer { Skip = request.Skip, Take = request.Take, Items = items, Count = count }; return result; } }