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); }
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); }