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); }
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); }
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) };
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); }