// GET api/products/5 public Product Get(int id) { var product = new ShoppingCartQuery().GetProduct(id); if (product == null) { throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); } return(product); }
public async Task <ActionResult <ShoppingCartDto> > UpdateCart([FromQuery] ShoppingCartQuery queryObj) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if ((queryObj.Action == ShoppingCartActions.Add || queryObj.Action == ShoppingCartActions.Delete) && !queryObj.ProductId.HasValue) { return(BadRequest("The product Id wasn't specify" + queryObj.ToString())); } var shoppingCart = await _context.ShoppingCarts .Include(sc => sc.Products) .SingleOrDefaultAsync(sc => sc.Id == queryObj.CartId); if (shoppingCart == null) { return(StatusCode(500)); } switch (queryObj.Action) { //очистка корзины case ShoppingCartActions.Clear: //var cartItems = _context.Entry(shoppingCart).Collection(sc => sc.Products).Query().ToList(); var cartItems = shoppingCart.Products; _context.ShoppingCartsProducts.RemoveRange(cartItems); break; //если пользователь добавляет продукт или увеличивает его количество case ShoppingCartActions.Add: if (shoppingCart.Products.Any(p => p.ProductId == queryObj.ProductId)) { var cartItem = shoppingCart.Products.SingleOrDefault(p => p.ProductId == queryObj.ProductId); cartItem.Quantity += 1; } else { var product = await _context.Products.FindAsync(queryObj.ProductId.Value); if (product == null) { return(BadRequest($"Product with id {queryObj.ProductId.Value} doesn't exist")); } shoppingCart.Products.Add(new ShoppingCartProduct() { Product = product, Quantity = 1 }); } break; //если пользователь убирает продукт из корзины или уменьшает ео количество case ShoppingCartActions.Delete: if (shoppingCart.Products.Any(p => p.ProductId == queryObj.ProductId)) { var cartItem = shoppingCart.Products.SingleOrDefault(p => p.ProductId == queryObj.ProductId); if (cartItem.Quantity > 1) { cartItem.Quantity -= 1; } else { shoppingCart.Products.Remove(cartItem); } } else { return(BadRequest($"Product with id {queryObj.ProductId.Value} doesn't exist in shoppingCart")); } break; default: return(BadRequest("Wrong productId was sent. Available values are clear, add, delete")); } //загружаем соответствующие продукты и возвращаем корзину с продуктами(хотя можно возвращать пока без всех продуктов) // 1) shoppingCart = await _context.ShoppingCarts // .Include(sc => sc.Products) // .ThenInclude(p => p.Product) // .SingleOrDefaultAsync(sc => sc.Id == queryObj.CartId); // 2 если будем возвращать количество // var count = await _context.Entry(shoppingCart).Collection(sc => sc.Products).Query().CountAsync(); Query().Include(p => p.Product); await _context.Products.Where(p => shoppingCart.Products.Select(scp => scp.ProductId).Contains(p.Id)).LoadAsync(); await _context.SaveChangesAsync(); return(Ok(_mapper.Map <ShoppingCartDto>(shoppingCart))); }