public async Task <IActionResult> GetDetailedProductById(int id)
        {
            var productResponse = await BestBuyApi.GetProductDetailById(id);

            if (productResponse is null)
            {
                return(StatusCode(500));
            }

            int numberOfProducts = productResponse.SelectToken("total").Value <int?>() ?? 0;

            if (numberOfProducts <= 0)
            {
                return(NotFound());
            }

            var alsoViewedResponse = await BestBuyApi.GetAlsoViewedProducts(id);

            List <ShortProduct> alsoViewedProducts = new List <ShortProduct>();
            var resultFromJToken = alsoViewedResponse.SelectToken("results");

            if (alsoViewedResponse != null && resultFromJToken.Count() > 0)
            {
                alsoViewedProducts = resultFromJToken.Select(result => new ShortProduct
                {
                    Id             = result["sku"].Value <int?>() ?? 0,
                    Name           = result["names"]["title"].Value <string>() ?? "",
                    ThumbnailImage = result["images"]["standard"].Value <string>() ?? "",
                    Price          = result["prices"]["current"].Value <float?>() ?? 0
                }).Take(3).ToList();
            }

            var detailedProduct = new DetailedProduct
            {
                Id            = productResponse.SelectToken("products[0].sku").Value <int?>() ?? 0,
                ImageUrl      = productResponse.SelectToken("products[0].image").Value <string>() ?? "",
                Name          = productResponse.SelectToken("products[0].name").Value <string>() ?? "",
                RegularPrice  = productResponse.SelectToken("products[0].regularPrice").Value <float?>() ?? 0,
                SalePrice     = productResponse.SelectToken("products[0].salePrice").Value <float?>() ?? 0,
                ReviewCount   = productResponse.SelectToken("products[0].customerReviewCount").Value <int?>() ?? 0,
                ReviewAverage = productResponse.SelectToken("products[0].customerReviewAverage").Value <float?>() ?? 0,
                Description   = productResponse.SelectToken("products[0].shortDescription").Value <string>() ?? "",
                AlsoViewed    = alsoViewedProducts
            };

            return(Ok(detailedProduct));
        }
Example #2
0
        public async Task <ActionResult> GetDetailedProduct(string urlTitle, string orderBy)
        {
            DetailedProduct product = await unitOfWork.Repository.Get(x => x.UrlTitle == urlTitle, DetailedProduct.select);

            if (product != null)
            {
                var results = new
                {
                    product,
                    media       = await unitOfWork.Repository.GetList(x => x.ProductId == product.id, Media.select),
                    content     = await unitOfWork.Repository.GetList(x => x.ProductId == product.id, DTOs.Content.select),
                    pricePoints = await unitOfWork.Repository.GetList(x => x.ProductId == product.id, PricePoint.select),
                    reviews     = await unitOfWork.ProductReviews.GetReviews(product.id, orderBy, 1, unitOfWork.ProductReviews.ReviewsPerPage),
                    orderByOptions.options,
                    unitOfWork.ProductReviews.ReviewsPerPage
                };

                return(Ok(results));
            }

            return(NotFound());
        }