Beispiel #1
0
        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));
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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}";
        }
Beispiel #4
0
        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}";
        }