private void Seed(ModelBuilder modelBuilder)
        {
            var seedingDataJson = File.ReadAllText("C:\\Users\\mihaela\\source\\repos\\Restaurant\\Infrastructure\\DataSeeding\\Data.json");
            var des             = JsonConvert.DeserializeObject <Data>(seedingDataJson);

            List <IngredientOnStock> seededIngredients = new List <IngredientOnStock>();

            foreach (var ingredient in des.IngredientsOnStock)
            {
                seededIngredients.Add(IngredientOnStock.Create(ingredient.Key, ingredient.Value));
            }

            modelBuilder.Entity <IngredientOnStock>().HasData(seededIngredients);

            // List<Dish> seededDishes = new List<Dish>();
            // foreach (var dish in des.Dishes)
            // {
            //     foreach (var usedIngredient in dish.UsedIngredients)
            //     {
            //         var usedIngredientOnStock = seededIngredients.Find(ingredient => ingredient.Name == usedIngredient.Key);
            //         DishIngredient dishIngredientLink = new DishIngredient() {Ingredient = usedIngredientOnStock, Dish = dish};
            //     }
            //
            //     seededDishes.Add(Dish.Create(dish.Name,dish.Price, true, ));
            // }
        }
        // ***
        public async Task <IResponseDto> CreateOrder(CreateOrderDto request)
        {
            bool                    areAllAvailable        = true;
            var                     wantedDishesEnumerator = request.WantedDishes.GetEnumerator();
            IList <Dish>            wantedDishes           = new List <Dish>();
            IDictionary <Guid, int> wantedDishesCount      = new Dictionary <Guid, int>();

            while (wantedDishesEnumerator.MoveNext() && areAllAvailable == true)
            {
                var wantedDish = await _unitOfWork.DishesRepository.Get(wantedDishesEnumerator.Current.Id);

                wantedDishes.Add(wantedDish);
                wantedDishesCount.Add(wantedDish.Id, wantedDishesEnumerator.Current.Count);

                areAllAvailable = wantedDish.IsAvailable;
            }
            wantedDishesEnumerator.Dispose();

            if (areAllAvailable == false)
            {
                return(ErrorResponseDto.Create("Some dishes are not available."));
            }
            var createdOrder = Order.Create(DateTime.Now, request.Adress);
            await _unitOfWork.OrdersRepository.Add(createdOrder);

            foreach (var wantedDish in wantedDishes)
            {
                wantedDishesCount.TryGetValue(wantedDish.Id, out int count);
                var orderDish = OrderDish.Create(wantedDish, createdOrder, count);

                await _unitOfWork.OrderDishesRepository.Add(orderDish);

                foreach (var wantedDishIngredient in wantedDish.DishIngredients)
                {
                    IngredientOnStock usedIngredient = wantedDishIngredient.Ingredient;
                    usedIngredient.Quantity -= wantedDishIngredient.Quantity;
                    await _unitOfWork.IngredientsRepository.Update(wantedDishIngredient.Ingredient);

                    foreach (var usedIngredientDish in wantedDishIngredient.Ingredient.IngredientDishes)
                    {
                        if (usedIngredientDish.Quantity > wantedDishIngredient.Ingredient.Quantity)
                        {
                            usedIngredientDish.Dish.IsAvailable = false;
                            await _unitOfWork.DishesRepository.Update(usedIngredientDish.Dish);
                        }
                    }
                }
            }

            await _unitOfWork.CommitAsync();

            // cauta dishurile orderului
            //verifica daca sunt available
            // create order
            // scade din fiecare ingredient folosit in dishurile alese
            //si pentru fiecare ingredient modificat se verifica dishurile la care se foloseste ingredientul (is available?)
            return(SuccessResponseDto.Create(_mapper.Map <OrderDto>(createdOrder)));
        }
Exemple #3
0
        public async Task <ActionResult <IngredientOnStock> > Get(Guid id)
        {
            IngredientOnStock searchedIngredient = await _stockService.Get(id);

            if (searchedIngredient != null)
            {
                return(Ok(searchedIngredient));
            }
            else
            {
                return(NotFound());
            }
        }