public async Task <IActionResult> Get([FromQuery] RestaurantGetAllRequest request) { BaseResponse <List <RestaurantGetResponse> > restaurants = await _restaurantsService.GetAllAsync(request); if (!restaurants.HasError && restaurants.Data != null && restaurants.Data.Any()) { PagedAPIResponse <List <RestaurantGetResponse> > response = new PagedAPIResponse <List <RestaurantGetResponse> >(); response.Items = new List <RestaurantGetResponse>(); response.Items.AddRange(restaurants.Data); PreprearePagination(request.Offset, request.Limit, restaurants.Total, "values", response); return(Ok(response)); } else if (!restaurants.HasError && restaurants.Data == null) { return(NotFound("No value found for requested filter.")); } else { return(BadRequest(restaurants.Errors)); } }
public async Task <IActionResult> Get([FromQuery] RestaurantGetAllRequest request) { BaseResponse <List <Restaurant> > RestaurantGetAllResponse = await _RestaurantService.GetRestaurantsAsync(request); if (RestaurantGetAllResponse.HasError) { return(BadRequest(RestaurantGetAllResponse.Errors)); } if (RestaurantGetAllResponse.Data == null || RestaurantGetAllResponse.Data.Count == 0) { return(NotFound("No Restaurant found for requested filter.")); } var response = new PagedAPIResponse <List <Restaurant> >(); response.Items = new List <Restaurant>(); response.Items.AddRange(RestaurantGetAllResponse.Data); PreparePagination(request.Offset, request.Limit, RestaurantGetAllResponse.Total, "Restaurants", response); return(Ok(response)); }
public void PreprearePagination <T>(int offset, int limit, long total, string resource, PagedAPIResponse <List <T> > response) { response.Total = total; response.PageSize = limit; response.Next = $"api/{resource}?offset={offset + limit + 1}&limit={limit}"; int tmpOffset = (offset - limit) - 1; if (tmpOffset >= 0) { response.Prev = $"api/{resource}?offset={tmpOffset}&limit={limit}"; } if (total > 0) { response.Last = $"api/{resource}?offset={total - limit}&limit={limit}"; } response.First = $"api/{resource}?offset=0&limit={limit}"; }
public void PreparePagination <T>(long offset, long limit, long total, string resource, PagedAPIResponse <List <T> > response) { response.Index = offset; response.Total = total; response.PageSize = limit; string queryString = string.Empty; string baseQuery = $"api/{resource}"; if (HttpContext.Request.QueryString.HasValue) { queryString = HttpContext.Request.QueryString.Value; } if (!queryString.Contains(OffsetPattern)) { queryString += "&" + OffsetPattern + "0"; } long tmpNextOffset = (offset + limit); if (tmpNextOffset < total) { string nextPage = queryString.Replace($"{OffsetPattern}{offset}", $"{OffsetPattern}{tmpNextOffset}", StringComparison.InvariantCultureIgnoreCase); response.Next = $"{baseQuery}{nextPage}"; } long tmpPrevOffset = (offset - limit); if (tmpPrevOffset >= 0) { string prevPage = queryString.Replace($"{OffsetPattern}{offset}", $"{OffsetPattern}{tmpPrevOffset}", StringComparison.InvariantCultureIgnoreCase); response.Prev = $"{baseQuery}{prevPage}"; } long tmpTotalPageOffset = (total - limit); if (tmpTotalPageOffset > 0) { string lastPage = queryString.Replace($"{OffsetPattern}{offset}", $"{OffsetPattern}{tmpTotalPageOffset}", StringComparison.InvariantCultureIgnoreCase); response.Last = $"{baseQuery}{lastPage}"; } string tmpFirstPage = queryString.Replace($"{OffsetPattern}{offset}", $"{OffsetPattern}0", StringComparison.InvariantCultureIgnoreCase); response.First = $"{baseQuery}{tmpFirstPage}"; }