示例#1
0
        //TODO: by far en karışık metot oldu. bunu işlere göre ayırmak gerek.
        // POST: api/Orders
        public IHttpActionResult Post([FromBody] List <BeverageOrdered> orderedBeverages)
        {
            //order'ın tamamını dönmelerini beklemiyoruz. sadece beverage ve addition id'leri ve
            //addition sayılarını dönmeleri yeterli. sürekli isimleri price'Ları taşımamıza gerek yok.
            //Response olarak doğru order'ı biz döneceğiz
            Order order = new Order();

            //Response Order'ına ekleyeeğimiz gerçek fiyatlı ve isimli içecek listesi
            List <BeverageOrdered> actualOrderedBeverages = new List <BeverageOrdered>();


            //total değerini toplayarak gideceğiz
            decimal total = 0;

            //ya hiç bir içecek gelmediyse kontrolü, hata dönülmeli
            if (orderedBeverages != null && orderedBeverages.Count > 0)
            {
                foreach (BeverageOrdered bev in orderedBeverages)
                {
                    //actual beverage listesine ekleyeceğimiz içecek.
                    var pricedBev = SetValuesOfBeverageById(bev);

                    //addition gelmemiş olabilir.
                    if (bev.Additions != null && bev.Additions.Count > 0)
                    {
                        List <AdditionOrdered> actualAdditionList = new List <AdditionOrdered>();
                        foreach (var add in bev.Additions)
                        {
                            //actual addition olarak ekleyeceğimiz ek lezzetler
                            AdditionOrdered realAdd = SetValuesOfAdditionById(add);

                            //order edilen içeceğin additionlarla birlkte toplam fiyatını buluyoruz.
                            pricedBev.BeveragePrice += (realAdd.AdditionPrice * realAdd.AdditionAmount);

                            actualAdditionList.Add(realAdd);
                        }

                        pricedBev.Additions = actualAdditionList;
                    }

                    actualOrderedBeverages.Add(pricedBev);

                    //total'i ekliyoruz.
                    total += pricedBev.BeveragePrice;
                }

                order.OrderItems = actualOrderedBeverages;
                order.TotalPrice = total;
                order.OrderDate  = DateTime.Now;
                //id'yi yine DB olsaydı autoIncrement ederdik.
                order.Id = _orders.Count() + 1;

                return(Ok(order));
            }
            else
            {
                return(BadRequest());
            }
        }
示例#2
0
        //sadece ID ve Amount gelen addition'un değerlerini çeken metot
        private AdditionOrdered SetValuesOfAdditionById(AdditionOrdered add)
        {
            //actual addition olarak ekleyeceğimiz ek lezzetler
            AdditionOrdered realAdd = new AdditionOrdered();

            //additionların gerçek değerlerinin id ile eşleştirilmesi
            realAdd.AdditionName   = additions.Find(x => x.Id == add.Id).AdditionName;
            realAdd.AdditionPrice  = additions.Find(x => x.Id == add.Id).AdditionPrice;
            realAdd.AdditionAmount = add.AdditionAmount; //yeni obje instance olunca bunu da eşleme gerekti

            return(realAdd);
        }