Пример #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);
        }
Пример #2
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);
        }