private string CreatePagedLinkRelToCurrentPage <T>(IPaginatedResult <T> paginatedResult, List <KeyValuePair <string, string> > filters, string orderBy, IUrlHelper urlHelper, string pageRouteName, int pagesFromCurrentPage) where T : class { return(CreatePageLink(pageSize: paginatedResult.PageSize, pageNumber: paginatedResult.CurrentPage + pagesFromCurrentPage, pageRouteName: pageRouteName, filters: filters, orderBy: orderBy, urlHelper: urlHelper)); }
public PaginationHeaderResponse AddPaginationHeaderMetaDataToResponse <T>(IPaginatedResult <T> paginatedResult, List <KeyValuePair <string, string> > filters, string orderBy, string pageRouteName, IUrlHelper urlHelper, HttpResponse response) where T : class { var previousPageLink = paginatedResult.CurrentPage > 1 ? CreatePagedLinkRelToCurrentPage(paginatedResult, filters, orderBy, urlHelper, pageRouteName, -1) : null; var nextPageLink = HasNextPage(paginatedResult) ? CreatePagedLinkRelToCurrentPage(paginatedResult, filters, orderBy, urlHelper, pageRouteName, 1) : null; var first = CreatePageLink(pageSize: paginatedResult.PageSize, pageNumber: 1, pageRouteName: pageRouteName, filters: filters, orderBy: orderBy, urlHelper: urlHelper); var last = CreatePageLink(pageSize: paginatedResult.PageSize, pageNumber: GetTotalPages(paginatedResult), pageRouteName: pageRouteName, filters: filters, orderBy: orderBy, urlHelper: urlHelper); PaginationHeaderResponse paginationHeaderResponse = new PaginationHeaderResponse { Total = GetTotalPages(paginatedResult), Size = paginatedResult.PageSize, Count = paginatedResult.RowCount, Current = paginatedResult.CurrentPage, Prev = previousPageLink, Next = nextPageLink, First = first, Last = last }; response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationHeaderResponse)); return(paginationHeaderResponse); }
public async Task<ActionResult<IEnumerable<SummarisedActualDto>>> Get(CancellationToken cancellationToken, string collectionReturnCode, string collectionType, [FromQuery]int? pageSize = null, [FromQuery]int? pageNumber = null) { if (string.IsNullOrWhiteSpace(collectionReturnCode) || string.IsNullOrWhiteSpace(collectionType)) { return BadRequest(); } IPaginatedResult<SummarisedActualDto> summarisedActuals = await _summarisedActualsRepository.GetSummarisedActuals(cancellationToken, collectionType, collectionReturnCode, pageSize ?? DefaultConstants.DefaultPageSize, pageNumber ?? DefaultConstants.DefaultPageNumber); _logger.LogVerbose($"Exiting Get Summarised Actuals, data count : {summarisedActuals.TotalItems}"); if (summarisedActuals?.TotalItems > 0) { Response.AddPaginationHeader(summarisedActuals); return Ok(summarisedActuals.List); } return NoContent(); }
public void ShouldGetEmptyPaginatedAccountsPageIfBiggerThanCollection() { //Arrange Account account1 = new Account() { AccountTypeId = 1, PersonId = 1, IdentityProviderId = "000-000-000", IsActive = true }; Account account2 = new Account() { AccountTypeId = 1, PersonId = 1, IdentityProviderId = "111-111-111", IsActive = true }; Account account3 = new Account() { AccountTypeId = 1, PersonId = 1, IdentityProviderId = "222-222-222", IsActive = true }; _db.Accounts.Add(account1); _db.Accounts.Add(account2); _db.Accounts.Add(account3); _db.SaveChanges(); //Act IPaginatedResult <IAccountDetail> result = _uow.AccountsRepository.PaginatedGetAllDetails(2, 3); //Assert Assert.IsEmpty(result.Items); Assert.AreEqual(0, result.Items.Count()); Assert.AreEqual(3, result.TotalItems); }
private bool HasNextPage <T>(IPaginatedResult <T> paginatedResult) where T : class { return(paginatedResult.RowCount > paginatedResult.CurrentPage * paginatedResult.PageSize); }
private int GetTotalPages <T>(IPaginatedResult <T> paginatedResult) where T : class { return(Convert.ToInt32(Math.Ceiling((paginatedResult.RowCount / (decimal)paginatedResult.PageSize)))); // 1 based page numbering }
/// <summary> /// Convert all elements of paginated result, using passed function. /// </summary> /// <typeparam name="TTo"></typeparam> /// <typeparam name="TFrom"></typeparam> /// <param name="paginatedResult"></param> /// <param name="convertingFunc"></param> /// <returns></returns> public static IPaginatedResult <TTo> MapTo <TTo, TFrom>(this IPaginatedResult <TFrom> paginatedResult, Func <TFrom, TTo> convertingFunc) where TFrom : class where TTo : class { return(new PaginatedResult <TTo>(paginatedResult.Page, paginatedResult.PerPage, paginatedResult.Total, paginatedResult.Data.Select(x => convertingFunc.Invoke(x)))); }