Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public static IQueryable<TResult> WithSpecification<TSource, TResult>(
/// <returns>A task that represents the asynchronous operation. The task result contains the paged result.</returns>
public static Task<PagedResult<TSource>> ToPagedResultAsync<TSource>(
this IQueryable<TSource> source,
PagingFilter filter,
IPagingFilter filter,
CancellationToken cancellationToken = default)
where TSource : class
=> ToPagedResultAsync(source, filter, PaginationSettings.Default, cancellationToken);
Expand All @@ -68,7 +68,7 @@ public static Task<PagedResult<TSource>> ToPagedResultAsync<TSource>(
/// <returns>A task that represents the asynchronous operation. The task result contains the paged result.</returns>
public static async Task<PagedResult<TSource>> ToPagedResultAsync<TSource>(
this IQueryable<TSource> source,
PagingFilter filter,
IPagingFilter filter,
PaginationSettings paginationSettings,
CancellationToken cancellationToken = default)
where TSource : class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public virtual async Task<List<TResult>> ProjectToListAsync<TResult>(Specificati
}

/// <inheritdoc/>
public virtual async Task<PagedResult<TResult>> ProjectToListAsync<TResult>(Specification<T> specification, PagingFilter filter, CancellationToken cancellationToken = default)
public virtual async Task<PagedResult<TResult>> ProjectToListAsync<TResult>(Specification<T> specification, IPagingFilter filter, CancellationToken cancellationToken = default)
{
var query = GenerateQuery(specification, true).AsNoTracking();
var projectedQuery = Map<TResult>(query);
Expand Down
2 changes: 1 addition & 1 deletion src/QuerySpecification/IProjectionRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,5 @@ public interface IProjectionRepository<T> where T : class
/// <param name="filter">The paging filter.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A task that represents the asynchronous operation. The task result contains the paged list of projected results.</returns>
Task<PagedResult<TResult>> ProjectToListAsync<TResult>(Specification<T> specification, PagingFilter filter, CancellationToken cancellationToken = default);
Task<PagedResult<TResult>> ProjectToListAsync<TResult>(Specification<T> specification, IPagingFilter filter, CancellationToken cancellationToken = default);
}
17 changes: 17 additions & 0 deletions src/QuerySpecification/Paging/IPagingFilter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace Pozitron.QuerySpecification;

/// <summary>
/// Represents a filter for paging.
/// </summary>
public interface IPagingFilter
{
/// <summary>
/// Gets the page number.
/// </summary>
int? Page { get; }

/// <summary>
/// Gets the page size.
/// </summary>
int? PageSize { get; }
}
10 changes: 5 additions & 5 deletions src/QuerySpecification/Paging/Pagination.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public Pagination(int totalItems, int totalPages, int pageSize, int page, int st
/// </summary>
/// <param name="itemsCount">The total number of items.</param>
/// <param name="filter">The paging filter.</param>
public Pagination(int itemsCount, PagingFilter filter)
public Pagination(int itemsCount, IPagingFilter filter)
: this(PaginationSettings.Default, itemsCount, filter.PageSize, filter.Page)
{
}
Expand All @@ -119,7 +119,7 @@ public Pagination(int itemsCount, int? pageSize, int? page)
/// <param name="paginationSettings">The pagination settings.</param>
/// <param name="itemsCount">The total number of items.</param>
/// <param name="filter">The paging filter.</param>
public Pagination(PaginationSettings paginationSettings, int itemsCount, PagingFilter filter)
public Pagination(PaginationSettings paginationSettings, int itemsCount, IPagingFilter filter)
: this(paginationSettings, itemsCount, filter.PageSize, filter.Page)
{
}
Expand Down Expand Up @@ -160,9 +160,9 @@ private static int GetHandledTotalItems(int itemsCount)
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int GetHandledPageSize(PaginationSettings settings, int? pageSize)
{
if (!pageSize.HasValue || pageSize <= 0) return settings.DefaultPageSize;
if (!pageSize.HasValue || pageSize.Value <= 0) return settings.DefaultPageSize;

if (pageSize > settings.DefaultPageSizeLimit) return settings.DefaultPageSizeLimit;
if (pageSize.Value > settings.DefaultPageSizeLimit) return settings.DefaultPageSizeLimit;

return pageSize.Value;
}
Expand All @@ -176,7 +176,7 @@ private static int GetHandledTotalPages(int handledTotalItems, int handledPageSi
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int GetHandledPage(PaginationSettings settings, int handledTotalPages, int? page)
{
if (!page.HasValue || page <= 0) return settings.DefaultPage;
if (!page.HasValue || page.Value <= 0) return settings.DefaultPage;

if (page.Value > handledTotalPages) return handledTotalPages;

Expand Down
2 changes: 1 addition & 1 deletion src/QuerySpecification/Paging/PagingFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/// <summary>
/// Represents a filter for paging.
/// </summary>
public record PagingFilter
public record PagingFilter : IPagingFilter
{
/// <summary>
/// Gets or sets the page number.
Expand Down
Loading