Skip to content

Commit

Permalink
Add default constructor
Browse files Browse the repository at this point in the history
  • Loading branch information
SitholeWB committed Mar 28, 2024
1 parent a66c186 commit c942e21
Showing 1 changed file with 67 additions and 57 deletions.
124 changes: 67 additions & 57 deletions Pagination.EntityFrameworkCore.Extensions/Pagination.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,68 +5,78 @@

namespace Pagination.EntityFrameworkCore.Extensions
{
public class Pagination<T>
{
public long TotalItems { get; private set; }
public int CurrentPage { get; private set; }
public int? NextPage { get; private set; }
public int? PreviousPage { get; private set; }
public int TotalPages { get; private set; }
public IEnumerable<T> Results { get; private set; }
public class Pagination<T>
{
public long TotalItems { get; private set; }
public int CurrentPage { get; private set; }
public int? NextPage { get; private set; }
public int? PreviousPage { get; private set; }
public int TotalPages { get; private set; }
public IEnumerable<T> Results { get; private set; }

public Pagination(Pagination<T> pagination)
{
TotalItems = pagination.TotalPages;
CurrentPage = pagination.CurrentPage;
NextPage = pagination.NextPage;
PreviousPage = pagination.PreviousPage;
TotalPages = pagination.TotalPages;
Results = pagination.Results;
}
public Pagination()
{
TotalItems = 0;
CurrentPage = 1;
NextPage = null;
PreviousPage = null;
TotalPages = 1;
Results = Enumerable.Empty<T>();
}

public Pagination(IEnumerable<T> results, long totalItems, int page = 1, int limit = 10, bool applyPageAndLimitToResults = false)
{
if (page <= 0)
{
throw new PaginationException("Page must be greater than 0");
}
public Pagination(Pagination<T> pagination)
{
TotalItems = pagination.TotalPages;
CurrentPage = pagination.CurrentPage;
NextPage = pagination.NextPage;
PreviousPage = pagination.PreviousPage;
TotalPages = pagination.TotalPages;
Results = pagination.Results;
}

var startIndex = (page - 1) * limit;
var endIndex = page * limit;
public Pagination(IEnumerable<T> results, long totalItems, int page = 1, int limit = 10, bool applyPageAndLimitToResults = false)
{
if (page <= 0)
{
throw new PaginationException("Page must be greater than 0");
}

TotalItems = totalItems;
CurrentPage = page;
Results = results ?? Enumerable.Empty<T>();
if (applyPageAndLimitToResults)
{
Results = Results.Skip(startIndex).Take(limit);
}
if (startIndex > 0)
{
PreviousPage = page - 1;
}
if (endIndex < totalItems)
{
NextPage = page + 1;
}
var startIndex = (page - 1) * limit;
var endIndex = page * limit;

TotalPages = limit > 0 ? (int)Math.Ceiling((decimal)totalItems / (decimal)limit) : 0;
}
TotalItems = totalItems;
CurrentPage = page;
Results = results ?? Enumerable.Empty<T>();
if (applyPageAndLimitToResults)
{
Results = Results.Skip(startIndex).Take(limit);
}
if (startIndex > 0)
{
PreviousPage = page - 1;
}
if (endIndex < totalItems)
{
NextPage = page + 1;
}

public static Pagination<TDestination> GetPagination<TSource, TDestination>(IEnumerable<TSource> results, long totalItems, Func<TSource, TDestination> convertTSourceToTDestinationMethod, int page = 1, int limit = 10, bool applyPageAndLimitToResults = false)
{
var destinationResults = results?.Select(x => convertTSourceToTDestinationMethod(x)) ?? new List<TDestination>();
return new Pagination<TDestination>(destinationResults, totalItems, page, limit, applyPageAndLimitToResults);
}
TotalPages = limit > 0 ? (int)Math.Ceiling((decimal)totalItems / (decimal)limit) : 0;
}

public static async Task<Pagination<TDestination>> GetPaginationAsync<TSource, TDestination>(IEnumerable<TSource> results, long totalItems, Func<TSource, Task<TDestination>> convertTSourceToTDestinationMethod, int page = 1, int limit = 10, bool applyPageAndLimitToResults = false)
{
if (results == null)
{
return new Pagination<TDestination>(new List<TDestination>(), totalItems, page, limit, applyPageAndLimitToResults);
}
var destinationResults = await results.Select(async ev => await convertTSourceToTDestinationMethod(ev)).WhenAll().ConfigureAwait(false);
return new Pagination<TDestination>(destinationResults, totalItems, page, limit, applyPageAndLimitToResults);
}
}
public static Pagination<TDestination> GetPagination<TSource, TDestination>(IEnumerable<TSource> results, long totalItems, Func<TSource, TDestination> convertTSourceToTDestinationMethod, int page = 1, int limit = 10, bool applyPageAndLimitToResults = false)
{
var destinationResults = results?.Select(x => convertTSourceToTDestinationMethod(x)) ?? new List<TDestination>();
return new Pagination<TDestination>(destinationResults, totalItems, page, limit, applyPageAndLimitToResults);
}

public static async Task<Pagination<TDestination>> GetPaginationAsync<TSource, TDestination>(IEnumerable<TSource> results, long totalItems, Func<TSource, Task<TDestination>> convertTSourceToTDestinationMethod, int page = 1, int limit = 10, bool applyPageAndLimitToResults = false)
{
if (results == null)
{
return new Pagination<TDestination>(new List<TDestination>(), totalItems, page, limit, applyPageAndLimitToResults);
}
var destinationResults = await results.Select(async ev => await convertTSourceToTDestinationMethod(ev)).WhenAll().ConfigureAwait(false);
return new Pagination<TDestination>(destinationResults, totalItems, page, limit, applyPageAndLimitToResults);
}
}
}

0 comments on commit c942e21

Please sign in to comment.