Example #1
0
        public static PagedResponse <T> Paginate <T>(IUriService uriService, PaginationFilter pagination, List <T> response, int total = 0)
        {
            int pageSize = pagination.PageSize >= 1 ? pagination.PageSize : 1;

            pageSize = (pageSize > 30) ? 30 : pageSize;
            int totalPages = (total + pageSize - 1) / pageSize;

            int pageNumber;

            if (pagination.PageNumber > totalPages)
            {
                pageNumber = totalPages;
            }
            else
            {
                pageNumber = pagination.PageNumber >= 1 ? pagination.PageNumber : 1;
            }

            bool createPreviousPage = pagination.PageNumber - 1 >= 1 && pagination.PageNumber <= totalPages;

            var nextPage = pageNumber < totalPages
                ? uriService
                           .CreatePaginationRequestUrl(new PaginationQuery(pagination.PageNumber + 1, pagination.PageSize)).ToString()
                : null;

            var previousPage = createPreviousPage
                ? uriService
                               .CreatePaginationRequestUrl(new PaginationQuery(pagination.PageNumber - 1, pagination.PageSize)).ToString()
                : null;

            var firstPage = uriService
                            .CreatePaginationRequestUrl(new PaginationQuery(1, pagination.PageSize)).ToString();

            var lastPage = uriService
                           .CreatePaginationRequestUrl(new PaginationQuery(totalPages, pagination.PageSize)).ToString();


            return(new PagedResponse <T>
            {
                Data = response,
                Meta = new PagedResponseMeta
                {
                    Total = total,
                    TotalPages = totalPages,
                    PageNumber = pageNumber,
                    PageSize = pageSize,
                    NextPage = nextPage,
                    PreviousPage = previousPage,
                    FirstPage = firstPage,
                    LastPage = lastPage
                }
            });
        }