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