예제 #1
0
        /// <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));
        }
예제 #2
0
        /// <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);
        }