Generator Changes at 9/27/2025 8:46:36 AM
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
namespace CMSMicroservice.Application.Common.Extensions;
|
||||
|
||||
public static class MetaDataExtensions
|
||||
{
|
||||
public static async Task<MetaData> GetMetaData<T>(this IQueryable<T> source, PaginationState? paginationState,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
if (paginationState is null)
|
||||
return new MetaData
|
||||
{
|
||||
TotalCount = await source.CountAsync(cancellationToken)
|
||||
};
|
||||
|
||||
var pageSize = paginationState.PageSize > 0 ? paginationState.PageSize : PaginationDefaults.PageSize;
|
||||
var pageNumber = paginationState.PageNumber > 0 ? paginationState.PageNumber : PaginationDefaults.PageNumber;
|
||||
var totalCount = await source.CountAsync(cancellationToken);
|
||||
var totalPageCount = (int)Math.Ceiling(totalCount / (double)pageSize);
|
||||
|
||||
var metaData = new MetaData
|
||||
{
|
||||
CurrentPage = pageNumber,
|
||||
HasNext = pageNumber < totalPageCount,
|
||||
HasPrevious = pageNumber > 1,
|
||||
PageSize = pageSize,
|
||||
TotalCount = totalCount,
|
||||
TotalPage = totalPageCount
|
||||
};
|
||||
return metaData;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
namespace CMSMicroservice.Application.Common.Extensions;
|
||||
|
||||
public static class PaginationStateExtensions
|
||||
{
|
||||
public static IQueryable<TSource> PaginatedListAsync<TSource>(this IQueryable<TSource> source,
|
||||
PaginationState? paginationState)
|
||||
{
|
||||
if (paginationState is null)
|
||||
return source;
|
||||
|
||||
var pageSize = paginationState.PageSize > 0 ? paginationState.PageSize : PaginationDefaults.PageSize;
|
||||
var pageNumber = paginationState.PageNumber > 0 ? paginationState.PageNumber : PaginationDefaults.PageNumber;
|
||||
var paginationSkip = pageSize * (pageNumber - 1);
|
||||
|
||||
return source.Skip(paginationSkip).Take(pageSize);
|
||||
}
|
||||
}
|
||||
|
||||
public static class PaginationDefaults
|
||||
{
|
||||
public const int PageSize = 10;
|
||||
public const int PageNumber = 1;
|
||||
public const int Skip = 0;
|
||||
public const int Take = PageSize;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.Linq.Dynamic.Core;
|
||||
using CMSMicroservice.Domain.Common;
|
||||
|
||||
namespace CMSMicroservice.Application.Common.Extensions;
|
||||
|
||||
public static class SortByExtensions
|
||||
{
|
||||
public static IQueryable<TSource> ApplyOrder<TSource>(this IQueryable<TSource> source,
|
||||
string? sortBy) where TSource : BaseAuditableEntity
|
||||
{
|
||||
// default sort approach
|
||||
if (sortBy is null or "")
|
||||
{
|
||||
source = source.OrderByDescending(p => p.Created);
|
||||
return source;
|
||||
}
|
||||
|
||||
// sort using dynamic linq
|
||||
source = source.OrderBy(sortBy);
|
||||
|
||||
return source;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user