예제 #1
0
        public static void InsertArticle(this Basket basket, BasketArticle basketArticle)
        {
            switch (basketArticle.Type)
            {
            case "Butter":
                if ((basket.Articles.FindAll(x => x.Type == "Butter").Count + 1) % 2 == 0)
                {
                    BasketArticle bread = basket.Articles.Find(x => x.Type == "Bread" && x.AppliedDiscount == false);
                    if (bread != null)
                    {
                        bread.AppliedDiscount = true;
                        bread.Price           = bread.Price / 2;
                    }
                    else
                    {
                        basket.UnusedDiscounts.Add(Discount.TwoButter);
                    }
                }
                basket.Articles.Add(basketArticle);
                break;

            case "Milk":
                if ((basket.Articles.FindAll(x => x.Type == "Milk").Count + 1) % 4 == 0)
                {
                    basketArticle.AppliedDiscount = true;
                    basketArticle.Price           = 0;
                }
                basket.Articles.Add(basketArticle);
                break;

            case "Bread":
                if (basket.UnusedDiscounts.FindIndex(x => x.Equals(Discount.TwoButter)) >= 0)
                {
                    basketArticle.AppliedDiscount = true;
                    basketArticle.Price           = basketArticle.Price / 2;
                    basket.UnusedDiscounts.Remove(Discount.TwoButter);
                }

                basket.Articles.Add(basketArticle);
                break;

            default:
                basket.Articles.Add(basketArticle);
                break;
            }
        }
예제 #2
0
        public Basket AddToBasket(String articleType, Guid basketGuid)
        {
            try
            {
                if (articleType == null)
                {
                    throw new ArgumentNullException(nameof(articleType));
                }

                if (basketGuid.Equals(Guid.Empty))
                {
                    throw new ArgumentException(nameof(basketGuid));
                }

                //This is bad but because we do identify article by type and not by guid (interview test require)
                Article article = _articleRepository.GetArticlesByType(articleType).GetEnumerator().Current;

                if (article == null)
                {
                    throw new ArgumentNullException(nameof(article));
                }

                Basket basket = _basketRepository.GetByGuid(basketGuid);

                if (basket == null)
                {
                    throw new ArgumentNullException(nameof(basket));
                }

                BasketArticle basketArticle = new BasketArticle(article);

                basket.InsertArticle(basketArticle);

                return(basket);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message, ex);
            }
        }