コード例 #1
0
ファイル: FridgeDAO.cs プロジェクト: RyHmann/CheckTheFridge
        internal List <MealIngredientViewModel> FetchAll()
        {
            List <MealIngredientViewModel> FridgeContents = new List <MealIngredientViewModel>();

            using (SqlConnection connection = new SqlConnection(singleConnectionString))
            {
                connection.Open();
                string        sqlFridgeIngredientQuery = @"
                        SELECT f.fridge_ingredient_id, f.ingredient_id, i.label, f.unit_id, u.label, f.quantity
                        FROM fridge_ingredient AS f
                        INNER JOIN ingredient AS i ON i.ingredient_id = f.ingredient_id
                        INNER JOIN unit AS u ON u.unit_id = f.unit_id";
                SqlCommand    getIngredient            = new SqlCommand(sqlFridgeIngredientQuery, connection);
                SqlDataReader ingredientReader         = getIngredient.ExecuteReader();
                if (ingredientReader.HasRows)
                {
                    while (ingredientReader.Read())
                    {
                        MealIngredientViewModel IngredientToIndex = new MealIngredientViewModel();
                        IngredientToIndex.FridgeIngredientId = ingredientReader.GetInt32(0);
                        IngredientToIndex.IngredientId       = ingredientReader.GetInt32(1);
                        IngredientToIndex.Label     = ingredientReader.GetString(2);
                        IngredientToIndex.UnitId    = ingredientReader.GetInt32(3);
                        IngredientToIndex.UnitLabel = ingredientReader.GetString(4);
                        IngredientToIndex.Quantity  = ingredientReader.GetDecimal(5);
                        FridgeContents.Add(IngredientToIndex);
                    }
                }
            }
            return(FridgeContents);
        }
コード例 #2
0
        internal MealIngredientViewModel FetchMealIngredient(int mealIngredientID)
        {
            using (SqlConnection connection = new SqlConnection(multiConnectionString))
            {
                string     sqlIngredientQuery = @"
                        SELECT m.meal_ingredient_id, m.meal_id, m.ingredient_id, i.label, m.unit_id, u.label, m.quantity
                        FROM meal_ingredient AS m
                        INNER JOIN ingredient AS i ON i.ingredient_id = m.ingredient_id
                        INNER JOIN unit AS u ON u.unit_id = m.unit_id
                        WHERE m.meal_id = @Id";
                SqlCommand command            = new SqlCommand(sqlIngredientQuery, connection);
                command.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = mealIngredientID;
                connection.Open();
                SqlDataReader reader           = command.ExecuteReader();
                var           ingredientToEdit = new MealIngredientViewModel();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        ingredientToEdit.MealIngredientId = reader.GetInt32(0);
                        ingredientToEdit.MealId           = reader.GetInt32(1);
                        ingredientToEdit.IngredientId     = reader.GetInt32(2);
                        ingredientToEdit.Label            = reader.GetString(3);
                        ingredientToEdit.UnitId           = reader.GetInt32(4);
                        ingredientToEdit.UnitLabel        = reader.GetString(5);
                        ingredientToEdit.Quantity         = reader.GetDecimal(6);
                    }
                }
                return(ingredientToEdit);
            }
        }
コード例 #3
0
        internal List <MealIngredientViewModel> FetchIngredientsOfMeal(int mealId)
        {
            var ingredientList = new List <MealIngredientViewModel>();

            using (SqlConnection connection = new SqlConnection(multiConnectionString))
            {
                string     sqlIngredientQuery = @"
                        SELECT m.meal_ingredient_id, m.meal_id, m.ingredient_id, i.label, m.unit_id, u.label, m.quantity
                        FROM meal_ingredient AS m
                        INNER JOIN ingredient AS i ON i.ingredient_id = m.ingredient_id
                        INNER JOIN unit AS u ON u.unit_id = m.unit_id
                        WHERE m.meal_id = @Id";
                SqlCommand getIngredient      = new SqlCommand(sqlIngredientQuery, connection);
                getIngredient.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = mealId;
                connection.Open();
                SqlDataReader ingredientReader = getIngredient.ExecuteReader();

                if (ingredientReader.HasRows)
                {
                    while (ingredientReader.Read())
                    {
                        var newIngredient = new MealIngredientViewModel();
                        newIngredient.MealIngredientId = ingredientReader.GetInt32(0);
                        newIngredient.MealId           = ingredientReader.GetInt32(1);
                        newIngredient.IngredientId     = ingredientReader.GetInt32(2);
                        newIngredient.Label            = ingredientReader.GetString(3);
                        newIngredient.UnitId           = ingredientReader.GetInt32(4);
                        newIngredient.UnitLabel        = ingredientReader.GetString(5);
                        newIngredient.Quantity         = ingredientReader.GetDecimal(6);
                        ingredientList.Add(newIngredient);
                    }
                }
            }
            return(ingredientList);
        }
コード例 #4
0
ファイル: FridgeDAO.cs プロジェクト: RyHmann/CheckTheFridge
 internal MealIngredientViewModel FetchOne(int id)
 {
     using (SqlConnection connection = new SqlConnection(singleConnectionString))
     {
         string     sqlQuery = @"
                 SELECT f.fridge_ingredient_id, f.ingredient_id, i.label, f.unit_id, u.label, f.quantity
                 FROM fridge_ingredient AS f
                 INNER JOIN ingredient AS i ON i.ingredient_id = f.ingredient_id
                 INNER JOIN unit AS u ON u.unit_id = f.unit_id
                 WHERE fridge_ingredient_id = @Id";
         SqlCommand command  = new SqlCommand(sqlQuery, connection);
         command.Parameters.Add("@Id", System.Data.SqlDbType.Int).Value = id;
         connection.Open();
         SqlDataReader ingredientReader  = command.ExecuteReader();
         var           ingredientToFetch = new MealIngredientViewModel();
         if (ingredientReader.HasRows)
         {
             while (ingredientReader.Read())
             {
                 ingredientToFetch.FridgeIngredientId = ingredientReader.GetInt32(0);
                 ingredientToFetch.IngredientId       = ingredientReader.GetInt32(1);
                 ingredientToFetch.Label     = ingredientReader.GetString(2);
                 ingredientToFetch.UnitId    = ingredientReader.GetInt32(3);
                 ingredientToFetch.UnitLabel = ingredientReader.GetString(4);
                 ingredientToFetch.Quantity  = ingredientReader.GetDecimal(5);
             }
         }
         return(ingredientToFetch);
     }
 }
コード例 #5
0
        public async Task <IActionResult> Create(MealIngredientViewModel mealIngredientViewModel)
        {
            var validator = new MealIngredientValidator();
            var result    = validator.Validate(mealIngredientViewModel.MealIngredient);
            List <MealIngredient> mealIngredientsCheck = new List <MealIngredient>(_context.MealIngredients
                                                                                   .Include(x => x.Ingredient)
                                                                                   .Where(x => x.MealId == mealIngredientViewModel.MealIngredient.MealId));

            if (mealIngredientsCheck.Where(x => x.Ingredient.IngredientId == mealIngredientViewModel.MealIngredient.IngredientId).Count() > 0)
            {
                ModelState.AddModelError(string.Empty, "The meal already contains the meal ingredient");
            }
            if (result.IsValid && ModelState.IsValid)
            {
                _context.Add(mealIngredientViewModel.MealIngredient);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Create", mealIngredientViewModel.MealId));
            }
            else
            {
                foreach (var item in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, item.ErrorMessage);
                }
            }
            mealIngredientViewModel.MealIngredients = new List <MealIngredient>(_context.MealIngredients.Where(x => x.MealId == mealIngredientViewModel.MealIngredient.MealId).Include(x => x.Meal));
            mealIngredientViewModel.Ingredients     = new SelectList(_context.Ingredients, "IngredientId", "Name", mealIngredientViewModel.MealIngredient.IngredientId);
            mealIngredientViewModel.Units           = new SelectList(_context.Units, "UnitId", "Name", mealIngredientViewModel.MealIngredient.UnitId);
            return(View(mealIngredientViewModel));
        }
コード例 #6
0
        public ActionResult Create()
        {
            var ingredientDBInterface = new FridgeDAO();
            var newIngredient         = new MealIngredientViewModel();
            var unitLabels            = new List <Unit>();

            unitLabels = ingredientDBInterface.FetchUnits();
            newIngredient.AvailableUnitLabels = unitLabels;
            return(View("FridgeIngredientCreateForm", newIngredient));
        }
コード例 #7
0
        public IActionResult Add(int Id)
        {
            var meal  = _mealRepository.GetMeal(Id);
            var model = new MealIngredientViewModel()
            {
                MealId   = Id,
                MealName = meal.Name
            };

            return(View(model));
        }
コード例 #8
0
        public ActionResult EditFridgeIngredient(MealIngredientViewModel updatedIngredient)
        {
            var updateFridge      = new FridgeDAO();
            var revisedIngredient = updatedIngredient;

            updateFridge.UpdateIngredient(revisedIngredient);
            var myFridge = new Fridge();

            myFridge.Contents = updateFridge.FetchAll();
            return(View("Index", myFridge));
        }
コード例 #9
0
        public IActionResult Edit(MealIngredientViewModel model)
        {
            var ingredient = new Ingredient();

            ingredient.ItemId  = model.ItemId;
            ingredient.Measure = model.Measure;
            //ingredient.Unit = model.Unit;

            _ingredientRepository.Edit(ingredient);
            return(RedirectToAction("Index", "MealIngredient", new { id = model.MealId }));
        }
コード例 #10
0
        //Add MealIngredient to Meal
        public ActionResult ProcessMealIngredientToAdd(int id)
        {
            var MealDBInterface        = new MealDAO();
            var mealIngredientToCreate = new MealIngredientViewModel();
            var unitList = new List <Unit>();

            unitList = MealDBInterface.FetchUnits();
            mealIngredientToCreate.MealId = id;
            mealIngredientToCreate.AvailableUnitLabels = unitList;
            return(View("MealIngredientCreateForm", mealIngredientToCreate));
        }
コード例 #11
0
ファイル: FridgeDAO.cs プロジェクト: RyHmann/CheckTheFridge
 internal void AddIngredientToIngredientDB(MealIngredientViewModel ingredientToAdd)
 {
     using (SqlConnection connection = new SqlConnection(singleConnectionString))
     {
         var        sqlAddIngredientQuery = "INSERT INTO [dbo].[ingredient] VALUES (@label)";
         SqlCommand addIngredient         = new SqlCommand(sqlAddIngredientQuery, connection);
         addIngredient.Parameters.Add("@label", System.Data.SqlDbType.VarChar).Value = ingredientToAdd.Label;
         connection.Open();
         addIngredient.ExecuteScalar();
     }
 }
コード例 #12
0
        //Edit MealIngredient
        public ActionResult ProcessMealIngredientToEdit(MealIngredientViewModel ingredientToEdit)
        {
            var MealDBInterface = new MealDAO();
            var mealId          = ingredientToEdit.MealId;

            MealDBInterface.UpdateMealIngredient(ingredientToEdit);
            var mealToDisplay = new MealViewModel();

            mealToDisplay = MealDBInterface.FetchMeal(mealId);
            return(View("MealForm", mealToDisplay));
        }
コード例 #13
0
        // GET: MealIngredient/Create
        public IActionResult Create(int id)
        {
            MealIngredientViewModel mealIngredientViewModel = new MealIngredientViewModel();

            mealIngredientViewModel.MealIngredient        = new MealIngredient();
            mealIngredientViewModel.MealIngredient.MealId = id;
            mealIngredientViewModel.MealIngredients       = new List <MealIngredient>(_context.MealIngredients
                                                                                      .Where(x => x.MealId == id).Include(x => x.Meal));
            mealIngredientViewModel.Ingredients = new SelectList(_context.Ingredients, "IngredientId", "Name");
            mealIngredientViewModel.Units       = new SelectList(_context.Units, "UnitId", "Name");
            return(View(mealIngredientViewModel));
        }
コード例 #14
0
        //Edit MealIngredient
        public ActionResult ProcessIngredientToEdit(int id)
        {
            var MealDBInterface      = new MealDAO();
            var mealIngredientToEdit = new MealIngredientViewModel();

            mealIngredientToEdit = MealDBInterface.FetchMealIngredient(id);
            var unitLabels = new List <Unit>();

            unitLabels = MealDBInterface.FetchUnits();
            mealIngredientToEdit.AvailableUnitLabels = unitLabels;
            return(View("MealIngredientForm", mealIngredientToEdit));
        }
コード例 #15
0
        public ActionResult EditIngredient(int id)
        {
            var ingredientDBInterface = new FridgeDAO();
            var newIngredient         = new MealIngredientViewModel();

            newIngredient = ingredientDBInterface.FetchOne(id);
            var unitLabels = new List <Unit>();

            unitLabels = ingredientDBInterface.FetchUnits();
            newIngredient.AvailableUnitLabels = unitLabels;
            return(View("MealIngredientForm", newIngredient));
        }
コード例 #16
0
 internal void UpdateMealIngredient(MealIngredientViewModel ingredientToEdit)
 {
     using (SqlConnection connection = new SqlConnection(singleConnectionString))
     {
         var        sqlQuery       = "UPDATE [dbo].[meal_ingredient] SET quantity = @quantity, unit_id = @unit WHERE meal_ingredient_id = @id";
         SqlCommand editIngredient = new SqlCommand(sqlQuery, connection);
         editIngredient.Parameters.Add("@id", System.Data.SqlDbType.Int).Value           = ingredientToEdit.MealIngredientId;
         editIngredient.Parameters.Add("@quantity", System.Data.SqlDbType.Decimal).Value = ingredientToEdit.Quantity;
         editIngredient.Parameters.Add("@unit", System.Data.SqlDbType.Int).Value         = ingredientToEdit.SelectedUnitId;
         connection.Open();
         editIngredient.ExecuteNonQuery();
     }
 }
コード例 #17
0
ファイル: FridgeDAO.cs プロジェクト: RyHmann/CheckTheFridge
 internal bool ingredientAlreadyInFridge(MealIngredientViewModel ingredientToCheck)
 {
     using (SqlConnection connection = new SqlConnection(connectionString))
     {
         //dbo.fridge_ingredient Query
         var        sqlFridgeIngredientDBOQuery = "SELECT ingredient_id FROM [dbo].[fridge_ingredient] WHERE ingredient_id = @id";
         var        ingredientID  = ingredientToCheck.FridgeIngredientId;
         SqlCommand fridgeDBCheck = new SqlCommand(sqlFridgeIngredientDBOQuery, connection);
         fridgeDBCheck.Parameters.Add("@id", System.Data.SqlDbType.Int).Value = ingredientID;
         connection.Open();
         var fridgeCheck = fridgeDBCheck.ExecuteScalar();
         if (fridgeCheck != null)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #18
0
        public ActionResult AddFridgeIngredient(MealIngredientViewModel newIngredient)
        {
            FridgeDAO dbInterface = new FridgeDAO();

            if (dbInterface.ingredientAlreadyInFridge(newIngredient))
            {
                ModelState.AddModelError("CustomError", "Ingredient already in Fridge");
                return(View());
            }
            else
            {
                dbInterface.AddIngredientToFridge(newIngredient);
            }
            var myFridge = new Fridge();

            myFridge.Contents = dbInterface.FetchAll();
            return(View("Index", myFridge));
        }
コード例 #19
0
        // GET: MealIngredient/Edit/5
        public async Task <IActionResult> Edit(int?id, MealIngredientViewModel mealIngredientViewModel)
        {
            if (id == null)
            {
                return(RedirectToAction("Error", "Home"));
            }

            var mealIngredient = await _context.MealIngredients.FindAsync(id);

            if (mealIngredient == null)
            {
                return(RedirectToAction("Error", "Home"));
            }
            mealIngredientViewModel.MealIngredient = mealIngredient;
            mealIngredientViewModel.Ingredients    = new SelectList(_context.Ingredients, "IngredientId", "Name", mealIngredientViewModel.MealIngredient.MealIngredientId);
            mealIngredientViewModel.Units          = new SelectList(_context.Units, "UnitId", "Name", mealIngredientViewModel.MealIngredient.UnitId);
            return(View(mealIngredientViewModel));
        }
コード例 #20
0
        public async Task <IActionResult> Edit(int id, MealIngredientViewModel mealIngredientViewModel)
        {
            if (id != mealIngredientViewModel.MealIngredient.MealIngredientId)
            {
                return(RedirectToAction("Error", "Home"));
            }

            if (ModelState.IsValid)
            {
                _context.Update(mealIngredientViewModel.MealIngredient);
                await _context.SaveChangesAsync();

                return(RedirectToAction("Create", new { id = mealIngredientViewModel.MealIngredient.MealId }));
            }
            mealIngredientViewModel.Ingredients = new SelectList(_context.Ingredients, "IngredientId", "Name", mealIngredientViewModel.MealIngredient.MealIngredientId);
            mealIngredientViewModel.Units       = new SelectList(_context.Units, "UnitId", "Name", mealIngredientViewModel.MealIngredient.UnitId);
            return(View(mealIngredientViewModel));
        }
コード例 #21
0
        public IActionResult Add(MealIngredientViewModel model)
        {
            var newModel = new Ingredient();

            newModel.ItemId  = model.ItemId;
            newModel.Measure = model.Measure;
            //newModel.Unit = model.Unit;

            var newId      = _ingredientRepository.Add(newModel);
            var newIMModel = new MealIngredient();

            newIMModel.IngredientId = newId;
            newIMModel.MealId       = model.MealId;


            _mealingredientRepository.Add(newIMModel);
            return(RedirectToAction("Index", "MealIngredient", new { id = newIMModel.MealId }));
        }
コード例 #22
0
        public ActionResult AddMealIngredientToMeal(MealIngredientViewModel ingredientToAdd)
        {
            var MealDBInterface = new MealDAO();
            var mealId          = ingredientToAdd.MealId;

            if (MealDBInterface.ingredientAlreadyInMeal(ingredientToAdd))
            {
                ModelState.AddModelError("CustomError", "Ingredient already in Fridge");
                return(View());
            }
            else
            {
                MealDBInterface.AddIngredientToMeal(ingredientToAdd);
            }

            var mealToDisplay = new MealViewModel();

            mealToDisplay = MealDBInterface.FetchMeal(mealId);
            return(View("Mealform", mealToDisplay));
        }
コード例 #23
0
        public IActionResult Index(int id)
        {
            var model    = _mealingredientRepository.GetIngredientsForMeal(id);
            var newModel = new List <MealIngredientViewModel>();

            foreach (var item in model)
            {
                var temp = new MealIngredientViewModel();
                temp.Id       = item.Ingredient.Id;
                temp.ItemName = item.Ingredient.Item.Name;
                temp.Measure  = item.Ingredient.Measure;
                temp.Unit     = item.Ingredient.Item.Unit;
                temp.MealId   = id;
                newModel.Add(temp);
            }
            var meal = _mealRepository.GetMeal(id);

            ViewBag.MealName = meal.Name;
            ViewBag.MealId   = meal.Id;
            return(View(newModel));
        }
コード例 #24
0
 internal void AddIngredientToMeal(MealIngredientViewModel ingredientToAdd)
 {
     if (!ingredientExistsInIngredientDb(ingredientToAdd.Label))
     {
         AddIngredientToIngredientDB(ingredientToAdd);
     }
     //add ingredient to dbo.meal_ingredient
     using (SqlConnection connection = new SqlConnection(singleConnectionString))
     {
         var        sqlAddIngredientQuery = @"
                 INSERT INTO [dbo].[meal_ingredient]
                 SELECT @meal_id, [dbo].[ingredient].ingredient_id, @unit_id, @quantity
                 FROM [dbo].[ingredient]
                 WHERE label = @label";
         SqlCommand addToMeal             = new SqlCommand(sqlAddIngredientQuery, connection);
         addToMeal.Parameters.Add("@meal_id", System.Data.SqlDbType.Int).Value      = ingredientToAdd.MealId;
         addToMeal.Parameters.Add("@label", System.Data.SqlDbType.VarChar).Value    = ingredientToAdd.Label;
         addToMeal.Parameters.Add("@unit_id", System.Data.SqlDbType.Int).Value      = ingredientToAdd.SelectedUnitId;
         addToMeal.Parameters.Add("@quantity", System.Data.SqlDbType.Decimal).Value = ingredientToAdd.Quantity;
         connection.Open();
         addToMeal.ExecuteNonQuery();
     }
 }
コード例 #25
0
ファイル: FridgeDAO.cs プロジェクト: RyHmann/CheckTheFridge
 internal void AddIngredientToFridge(MealIngredientViewModel ingredientToAdd)
 {
     //check if ingredient exists in dbo.ingredient
     //var ingredientLabel = ingredientToAdd.Label;
     if (ingredientExistsInIngredientDb(ingredientToAdd.Label) == false)
     {
         AddIngredientToIngredientDB(ingredientToAdd);
     }
     //add ingredient to dbo.fridge_ingredient
     using (SqlConnection connection = new SqlConnection(singleConnectionString))
     {
         var        sqlAddIngredientQuery = @"
                 INSERT INTO [dbo].[fridge_ingredient]
                 SELECT [dbo].[ingredient].ingredient_id, @unit_id, @quantity
                 FROM [dbo].[ingredient]
                 WHERE label = @label";
         SqlCommand addToFridge           = new SqlCommand(sqlAddIngredientQuery, connection);
         addToFridge.Parameters.Add("@label", System.Data.SqlDbType.VarChar).Value = ingredientToAdd.Label;
         addToFridge.Parameters.Add("@unit_id", System.Data.SqlDbType.Int).Value   = ingredientToAdd.SelectedUnitId;
         addToFridge.Parameters.Add("@quantity", System.Data.SqlDbType.Int).Value  = ingredientToAdd.Quantity;
         connection.Open();
         addToFridge.ExecuteNonQuery();
     }
 }
コード例 #26
0
        public async Task <ActionResult <MealIngredientViewModel> > EditMealIngredient(int mealId, int mealIngredientId, MealIngredientViewModel model)
        {
            try
            {
                // Do we need to check if mealIngredientId == model.mealIngredientId?
                // Do we need to check if mealId == model.mealId?

                var existingMealIngredient = _repository.GetMealIngredientByMealId(mealId, mealIngredientId);

                if (existingMealIngredient == null)
                {
                    return(NotFound("Couldn't find meal ingredient"));
                }

                if (mealId != model.MealId || mealIngredientId != model.MealIngredientId)
                {
                    return(BadRequest("Unable to edit Meals or Meal Ingredients during this stage."));
                }

                // Do we want to allow the user to change the ingredient type here? If so, we will need checks similar to Post ie: checking if ingredient exists in Db, and checking if ingredient is already part of this meal.

                // Throwing error if no changes detected. Any additional items that can be changes should be added to this check.
                if (model.Quantity == existingMealIngredient.Quantity)
                {
                    return(Ok("No changes detected."));
                }

                existingMealIngredient.Quantity = model.Quantity;

                var saveChanges = await _repository.SaveAll();

                if (saveChanges)
                {
                    return(_mapper.Map <MealIngredientViewModel>(existingMealIngredient));
                }
            }
            catch (Exception exception)
            {
                _logger.LogError($"Could not add that meal ingredient: {exception}");
                return(BadRequest("Could not add that ingredient."));
            }
            return(BadRequest("Could not update that ingredient. You are unable to edit Meals and Ingredients in this manner."));
        }
コード例 #27
0
        public async Task <ActionResult <MealIngredientViewModel> > AddIngredientToMeal(int mealId, MealIngredientViewModel model)
        {
            try
            {
                var existingMeal   = _repository.GetMealById(mealId);
                var mealIngredient = _mapper.Map <MealIngredient>(model);

                // Confirm meal exists
                if (existingMeal == null)
                {
                    return(BadRequest($"Meal with ID: {mealId} does not exist."));
                }

                if (model.Ingredient.Name == null)
                {
                    return(BadRequest("Ingredient Name is required"));
                }

                // Check if ingredient exists in database
                bool ingredientExistsInDb = await _repository.IngredientExists(mealIngredient.Ingredient);

                if (ingredientExistsInDb)
                {
                    mealIngredient.Ingredient = await _repository.GetIngredientByName(model.Ingredient.Name);
                }
                else
                {
                    var newIngredient = mealIngredient.Ingredient;
                    _repository.AddEntity(newIngredient);
                }

                // Check if ingredient is already assigned to this meal
                if (_repository.IngredientAlreadyAssignedToMeal(mealId, mealIngredient.Ingredient.IngredientId))
                {
                    return(BadRequest("Ingredient is already assigned to this meal."));
                }

                mealIngredient.Meal = existingMeal;
                _repository.AddEntity(mealIngredient);
                var saveChanges = await _repository.SaveAll();

                if (saveChanges)
                {
                    var url = _linkGenerator.GetPathByAction("ShowMealIngredient", "MealIngredients",
                                                             values: new { mealId, mealIngredientId = mealIngredient.MealIngredientId });
                    if (string.IsNullOrWhiteSpace(url))
                    {
                        return(BadRequest("Could not use MealIngredientId."));
                    }
                    return(Created($"{url}", _mapper.Map <MealIngredientViewModel>(mealIngredient)));
                }
                else
                {
                    return(BadRequest($"Failed to save new meal ingredient to meal with Meal Id: {mealId}."));
                }
            }
            catch (Exception exception)
            {
                _logger.LogError($"Could not add that meal ingredient: {exception}");
                return(BadRequest("Could not add that ingredient."));
            }
        }