public static void AddPaginationHeader <T>(this Controller controller, IResourceParameter parameters, IPagedResult <T> result, IUrlHelper urlHelper) { var actionName = controller.ControllerContext.ActionDescriptor.AttributeRouteInfo.Name; var attributes = new[] { nameof(parameters.PageNumber).PascalToCamelCase(), nameof(parameters.PageSize).PascalToCamelCase() }; var prevPage = result.HasPrevious ? urlHelper.Link(actionName, new Dictionary <string, string> { { attributes[0], (result.PageNumber - 1).ToString() }, { attributes[1], result.PageSize.ToString() } }.AddRange(parameters.GetPageHeader())) : null; var nextPage = result.HasNext ? urlHelper.Link(actionName, new Dictionary <string, string> { { attributes[0], (result.PageNumber + 1).ToString() }, { attributes[1], result.PageSize.ToString() } }.AddRange(parameters.GetPageHeader())) : null; var metaData = new { currentPage = result.PageNumber, pageSize = result.PageSize, totalPages = result.TotalPages, totalCount = result.TotalCount, previousPageLink = PercentEncodeReplace.Replace(prevPage), nextPageLink = PercentEncodeReplace.Replace(nextPage) }; controller.Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(metaData)); }
public static IQueryable <T> ApplyFilters <T>(this IQueryable <T> source, IResourceParameter <T> param) { if (source == null) { throw new ArgumentException($"{ nameof(source) }"); } return(((IInternalResourceParameter <T>)param).ApplyFilters(source)); }
public static IPagedResult <T> ToPagedResult <T>(this IQueryable <T> source, IResourceParameter <T> param) { int count = source.Count(); int pageNum = GetPageNum(count, param.PageSize, param.PageNumber); var items = source.Skip((pageNum - 1) * param.PageSize).Take(param.PageSize).ToList(); return(new PagedResult <T>(items, pageNum, param.PageSize, count)); }
public static IQueryable <T> ApplyOrderBy <T>(this IQueryable <T> source, IResourceParameter <T> param) { if (source == null) { throw new ArgumentException($"{ nameof(source) }"); } source = ((IInternalResourceParameter <T>)param).ApplyOrderBy(source); return(source); }
public static async Task <IPagedResult <T> > ToPagedResultAsync <T>(this IQueryable <T> source, Func <IQueryable <T>, Task <int> > CountAsync, Func <IQueryable <T>, Task <List <T> > > ToListAsync, IResourceParameter <T> param) { int count = await CountAsync(source); int pageNum = GetPageNum(count, param.PageSize, param.PageNumber); var test = source.Skip((pageNum - 1) * param.PageSize).Take(param.PageSize); var items = await ToListAsync(test); return(new PagedResult <T>(items, pageNum, param.PageSize, count)); }
public async Task <IActionResult> GetUsers(IResourceParameter <User> param) { //Gets data from database var usersDb = await _unitOfWork.Users.GetAsync(param); //var users = _mapper.Map<IEnumerable<User>, IEnumerable<UserDto>>(usersDb); //Adds Paginationheader to response this.AddPaginationHeader(param, usersDb, _urlHelper); //Shapes data on return. return(Ok(usersDb.ShapeData(param))); }
public static IQueryable <T> ApplyIncludes <T>(this IQueryable <T> source, Func <IQueryable <T>, string, IQueryable <T> > Include, IResourceParameter <T> param) { if (source == null) { throw new ArgumentException($"{ nameof(source) }"); } return(Include == null ? source : ((IInternalResourceParameter <T>)param).ApplyExpand(source, Include)); }
public static IEnumerable <object> ShapeData <TEntity>(this IEnumerable <TEntity> source, IResourceParameter param) { if (source == null) { throw new ArgumentNullException($"{nameof(source)}"); } var internalParam = (IInternalResourceParameter <TEntity>)param; return(internalParam.ApplySelect(source)); }
public async Task <IPagedResult <T> > GetAsync(IResourceParameter <T> parameters) { var collection = Context.Set <T>().ApplyIncludes((q, i) => q.Include(i), parameters).ApplyFilters(parameters).ApplyOrderBy(parameters); return(await collection.ToPagedResultAsync(async q => await q.CountAsync(), async q => await q.ToListAsync(), parameters)); }
public IPagedResult <T> Get(IResourceParameter <T> parameters) { var collection = Context.Set <T>().ApplyFilters(parameters); return(collection.ToPagedResult(parameters)); }