Exemplo n.º 1
0
        public ProductState ProductCanBePurchased(Cart cart)
        {
            ISpecification <Product> faultyProductSpec = new ProductReturnReasonSpec(ReturnReason.Faulty);

            foreach (var cartProduct in cart.Products)
            {
                var product = productRepository.FindById(cartProduct.ProductId);
                if (product == null)
                {
                    throw new Exception($"Product {cartProduct.ProductId} not found");
                }

                var isInStock = new ProductIsInStockSpec(cartProduct).IsSatisfiedBy(product);

                if (!isInStock)
                {
                    return(ProductState.NotInStock);
                }

                var isFaulty = faultyProductSpec.IsSatisfiedBy(product);

                if (isFaulty)
                {
                    return(ProductState.IsFaulty);
                }
            }
            return(ProductState.OK);
        }
 /// <summary>
 /// Products the can be purchased.
 /// </summary>
 /// <param name="cart">The cart.</param>
 /// <returns>ProductState.</returns>
 /// <exception cref="Exception"></exception>
 public ProductState ProductCanBePurchased(Cart cart)
 {
     foreach (var cartProduct in cart.Products)
     {
         var product   = _productRepository.FindById(cartProduct.ProductId);
         var isInStock = new ProductIsInStockSpec(cartProduct).IsSatisfiedBy(product);
         if (!isInStock)
         {
             return(ProductState.NotInStock);
         }
     }
     return(ProductState.Ok);
 }
Exemplo n.º 3
0
        public virtual Nullable <ProductIssues> IsPurchaseReady()
        {
            ISpecification <Product> faultyProductSpec = new ProductReturnReasonSpec(ReturnReason.Faulty);

            foreach (CartProduct cartProduct in this.Products)
            {
                bool isInStock = new ProductIsInStockSpec(cartProduct)
                                 .IsSatisfiedBy(cartProduct.Product);

                if (!isInStock)
                {
                    return(ProductIssues.NotInStock);
                }

                bool isFaulty = faultyProductSpec.IsSatisfiedBy(cartProduct.Product);

                if (isFaulty)
                {
                    return(ProductIssues.IsFaulty);
                }
            }
            return(null);
        }