/// <summary> /// The CheckOut /// </summary> /// <param name="shoppingCartId">The shoppingCartId<see cref="int"/></param> /// <returns>The <see cref="Receipt"/></returns> public Receipt CheckOut(int shoppingCartId) { var shoppingCart = FindShoppingCart(shoppingCartId); Receipt receipt = new Receipt { TransactionTime = DateTimeOffset.UtcNow, ShoppingList = new List <TransactionItem>() }; var items = receipt.ShoppingList; foreach (var productItem in shoppingCart.ItemList) { var product = _marketRepository.FindProduct(productItem.ProductId); items.Add(new TransactionItem { Id = productItem.ProductId, Name = product.Name, Price = product.Price, Count = productItem.Count }); _marketRepository.RemoveFromStock(productItem.ProductId, productItem.Count); } shoppingCart.ItemList.Clear(); return(AddNewReceipt(receipt)); }
/// <summary> /// The RemoveProduct /// </summary> /// <param name="productID">The productID<see cref="int"/></param> public void RemoveProduct(int productID) { var locker = LockFile("product.lk"); var product = _marketRepository.FindProduct(productID); if (product == null) { UnlockFile(locker); throw new InvalidOperationException("This product does not exist."); } var locker2 = LockFile("stock.lk"); var stock = _marketRepository.GetStock(productID); if (stock != null) { UnlockFile(locker2); UnlockFile(locker); throw new InvalidOperationException($"There are still some {product.Name}({stock.Count}) in the stock."); } _marketRepository.RemoveProduct(product); UnlockFile(locker2); UnlockFile(locker); }