using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; namespace API.Helpers; #nullable enable public class PagedList : List { private PagedList(IEnumerable items, int count, int pageNumber, int pageSize) { CurrentPage = pageNumber; TotalPages = (int) Math.Ceiling(count / (double) pageSize); PageSize = pageSize; TotalCount = count; AddRange(items); } public int CurrentPage { get; set; } public int TotalPages { get; set; } public int PageSize { get; set; } public int TotalCount { get; set; } public static async Task> CreateAsync(IQueryable source, int pageNumber, int pageSize) { // NOTE: OrderBy warning being thrown here even if query has the orderby statement var count = await source.CountAsync(); var items = await source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToListAsync(); return new PagedList(items, count, pageNumber, pageSize); } }