using PARR.API.Contracts.V1.Responses.Base;
using PARR.Domain.Common.Pagination;
namespace PARR.API.Extensions
{
public static class PaginationExtensions
{
///
/// Заполняет TotalItems, PageNumber, PageSize, TotalPage
///
///
///
///
///
///
///
public static PagedResponse GetPaginatedProps(
this PagedResponse pagedResponse,
PaginationFilter paginationFilter,
IQueryable queryAllItemsApplyFilters
)
{
// TODO: CountAsync - подумать и затолкать в Task
int totalItems = queryAllItemsApplyFilters.Count();//.CountAsync().GetAwaiter().GetResult();
return CreatePaginatedResponse(totalItems, paginationFilter, pagedResponse);
}
///
/// Заполняет TotalItems, PageNumber, PageSize, TotalPage
///
///
///
///
///
///
public static PagedResponse GetPaginatedProps(
this PagedResponse pagedResponse,
PaginationFilter paginationFilter,
int totalItems
)
{
return CreatePaginatedResponse(totalItems, paginationFilter, pagedResponse);
}
private static PagedResponse CreatePaginatedResponse(int totalItems, PaginationFilter paginationFilter, PagedResponse pagedResponse)
{
pagedResponse.TotalItems = totalItems;
pagedResponse.PageNumber = paginationFilter.PageNumber >= 1 ? paginationFilter.PageNumber : (int?)null;
pagedResponse.PageSize = paginationFilter.PageSize >= 1 ? paginationFilter.PageSize : (int?)null;
//pagedResponse.PageNumber = paginationFilter.IsDisabledPagination
// ? 1
// : (paginationFilter.PageNumber >= 1 ? paginationFilter.PageNumber : (int?)null);
//pagedResponse.PageSize = paginationFilter.IsDisabledPagination
// ? totalItems
// : (paginationFilter.PageSize >= 1 ? paginationFilter.PageSize : (int?)null);
pagedResponse.TotalPage =
(pagedResponse.TotalItems.HasValue && pagedResponse.PageSize.HasValue)
? (int)Math.Ceiling(pagedResponse.TotalItems.Value / (double)pagedResponse.PageSize.Value)
: (int?)null;
return pagedResponse;
}
}
}