public async Task <int> ChangeShoppingCartProductCountAsync(Product product, ShoppingCart shoppingCart, string operation, ISession session) { if (shoppingCart != null) { int returnCode = 1; await Task.Run(() => { try { ShoppingCartProduct shoppingCartProduct = _context.ShoppingCartProduct .Where(scp => scp.Product.Name == product.Name && scp.ShoppingCart == shoppingCart) .FirstOrDefault(); //Change if (operation == "reduce" && shoppingCartProduct.Quantity > 1) { shoppingCartProduct.Quantity--; } else if (operation == "increase") { shoppingCartProduct.Quantity++; } _context.Update(shoppingCartProduct); _context.Update(shoppingCart); var t2 = Task.Run( async() => { await _context.SaveChangesAsync(); }); t2.Wait(); returnCode = 0; } catch (Exception) { returnCode = 1; } }); return(returnCode); } else { if (operation == "reduce") { await session.AddSessionProductAsync(product.Id, -1); } else if (operation == "increase") { await session.AddSessionProductAsync(product.Id, 1); } return(0); } }
public async Task <int> AddProductToShoppingCartAsync(Product product, ShoppingCart cart, int quantity, ISession session) { if (cart != null) { int returnCode = 1; // 0 - success // 1 - error // 2 - limit reached await Task.Run(() => { try { // Check if such product has already been added ShoppingCartProduct shoppingCartProduct = _context.ShoppingCartProduct .Where(scp => scp.Product == product && scp.ShoppingCart == cart) .FirstOrDefault(); // No such product found if (shoppingCartProduct == null) { int productsInCart = 0; var t = Task.Run(async() => { productsInCart = await CountProductsInShoppingCart(cart); }); t.Wait(); if (productsInCart >= maxProductsInShoppingCart) { returnCode = 2; } else { shoppingCartProduct = new ShoppingCartProduct { Product = product, ShoppingCart = cart, Quantity = quantity }; _context.Add(shoppingCartProduct); var t2 = Task.Run( async() => { await _context.SaveChangesAsync(); }); t2.Wait(); returnCode = 0; // success } } // Product found: update it else { shoppingCartProduct.ShoppingCart = cart; shoppingCartProduct.Quantity += quantity; _context.Update(shoppingCartProduct); var t2 = Task.Run( async() => { await _context.SaveChangesAsync(); }); t2.Wait(); returnCode = 0; // success } } catch (Exception) { returnCode = 1; // exception //throw new Exception(e.ToString()); } }); return(returnCode); } else { if (await session.CountProducts() >= maxProductsInShoppingCart) { return(2); } else { await session.AddSessionProductAsync(product.Id, quantity); return(0); } } }