Esempio n. 1
0
        public async Task <IActionResult> GetDrinks([FromQuery] DrinkParameters drinkParameters, [FromQuery] PaginationParameters paginationParameters)
        {
            var drinksFromRepo = await _drinkRepository.GetDrinksAsync(
                drinkParameters.Keyword,
                drinkParameters.Country,
                drinkParameters.Brand,
                drinkParameters.Type,
                drinkParameters.PriceOperator,
                drinkParameters.PriceValue,
                drinkParameters.OrderBy,
                paginationParameters.PageNumber,
                paginationParameters.PageSize);

            if (drinksFromRepo.Count() <= 0)
            {
                return(NotFound("Drinks not found."));
            }

            var previousLink = drinksFromRepo.HasPrevious ? GenerateDrinkResourceURL(drinkParameters, paginationParameters, ResourceUriType.PreviousPage) : null;
            var nextLink     = drinksFromRepo.HasNext ? GenerateDrinkResourceURL(drinkParameters, paginationParameters, ResourceUriType.NextPage) : null;

            var paginationMetaData = new
            {
                previousLink,
                nextLink,
                totalCount  = drinksFromRepo.TotalCount,
                totalPages  = drinksFromRepo.TotalPages,
                pageSize    = drinksFromRepo.PageSize,
                currentPage = drinksFromRepo.CurrentPage
            };

            Response.Headers.Add("x-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetaData));

            var drinkDto = _mapper.Map <DrinkDTO[]>(drinksFromRepo);

            var shapedData = drinkDto.ShapeData <DrinkDTO>(drinkParameters.Fields);

            return(Ok(shapedData));
        }