Exemple #1
0
        private static Link GetLastLink(Link self, int size, PagingParameters pagingOptions)
        {
            if (pagingOptions?.Limit == null)
            {
                return(null);
            }

            var limit = pagingOptions.Limit.Value;

            if (size <= limit)
            {
                return(null);
            }

            var offset = Math.Ceiling((size - (double)limit) / limit) * limit;

            var parameters = new RouteValueDictionary(self.RouteValues)
            {
                ["limit"]  = limit,
                ["offset"] = offset
            };
            var newLink = Link.ToCollection(self.RouteName, parameters);

            return(newLink);
        }
Exemple #2
0
        private static Link GetNextLink(Link self, int size, PagingParameters pagingOptions)
        {
            if (pagingOptions?.Limit == null)
            {
                return(null);
            }
            if (pagingOptions?.Offset == null)
            {
                return(null);
            }

            var limit  = pagingOptions.Limit.Value;
            var offset = pagingOptions.Offset.Value;

            var next = offset + limit;

            if (next >= size)
            {
                return(null);
            }

            var parameters = new RouteValueDictionary(self.RouteValues)
            {
                ["limit"]  = limit,
                ["offset"] = next
            };

            var newLink = Link.ToCollection(self.RouteName, parameters);

            return(newLink);
        }
Exemple #3
0
 public static TResponse Create <TResponse>(Link self, T[] items, int size, PagingParameters pagingOptions)
     where TResponse : PagedCollection <T>, new()
 => new TResponse
 {
     Self     = self,
     Value    = items,
     Size     = size,
     Offset   = pagingOptions.Offset,
     Limit    = pagingOptions.Limit,
     First    = self,
     Next     = GetNextLink(self, size, pagingOptions),
     Previous = GetPreviousLink(self, size, pagingOptions),
     Last     = GetLastLink(self, size, pagingOptions)
 };
Exemple #4
0
        private static Link GetPreviousLink(Link self, int size, PagingParameters pagingOptions)
        {
            if (pagingOptions?.Limit == null)
            {
                return(null);
            }
            if (pagingOptions?.Offset == null)
            {
                return(null);
            }

            var limit  = pagingOptions.Limit.Value;
            var offset = pagingOptions.Offset.Value;

            if (offset == 0)
            {
                return(null);
            }

            if (offset > size)
            {
                return(GetLastLink(self, size, pagingOptions));
            }

            var previousPage = Math.Max(offset - limit, 0);

            if (previousPage <= 0)
            {
                return(self);
            }

            var parameters = new RouteValueDictionary(self.RouteValues)
            {
                ["limit"]  = limit,
                ["offset"] = previousPage
            };
            var newLink = Link.ToCollection(self.RouteName, parameters);

            return(newLink);
        }