public async Task <IActionResult> Create([Bind("WorkoutId,WorkoutName,WorkoutTypeId")] WorkoutViewModel model,
                                                 string[] selectedExercises)
        {
            var workout = _mapper.Map <WorkoutViewModel, Workout>(model);

            if (selectedExercises != null)
            {
                workout.ExerciseAssigments = new List <ExerciseAssigment>();
                foreach (var exercise in selectedExercises)
                {
                    var exerciseToAdd =
                        new ExerciseAssigment()
                    {
                        WorkoutId = workout.WorkoutId, ExerciseId = int.Parse(exercise)
                    };
                    workout.ExerciseAssigments.Add(exerciseToAdd);
                }
            }
            if (ModelState.IsValid)
            {
                _unitOfWork.WorkoutRepository.Add(workout);
                await _unitOfWork.WorkoutRepository.SaveAsync();

                return(RedirectToAction(nameof(Index)));
            }
            PopulateAssignedExerciseData(workout);
            ViewData["WorkoutTypeId"] =
                new SelectList(_unitOfWork.WorkoutTypeRepository.GetAll(), "WorkoutTypeId", "WorkoutTypeName", workout.WorkoutTypeId);
            var workoutVm = _mapper.Map <Workout, WorkoutViewModel>(workout);

            return(View(workoutVm));
        }
        private void UpdateWorkoutExercises(string[] selectedExercises, Workout workout)
        {
            if (selectedExercises == null)
            {
                workout.ExerciseAssigments = new List <ExerciseAssigment>();
                return;
            }

            var selectedExercisesHS = new HashSet <string>(selectedExercises);
            var workoutExercises    = new HashSet <int>
                                          (workout.ExerciseAssigments.Select(c => c.Exercise.ExerciseId));
            var exercises = _unitOfWork.ExerciseRepository.GetAll();

            foreach (var exercise in exercises)
            {
                if (selectedExercisesHS.Contains(exercise.ExerciseId.ToString()))
                {
                    if (!workoutExercises.Contains(exercise.ExerciseId))
                    {
                        workout.ExerciseAssigments.Add(new ExerciseAssigment()
                        {
                            WorkoutId  = workout.WorkoutId,
                            ExerciseId = exercise.ExerciseId
                        });
                    }
                }
                else
                {
                    if (workoutExercises.Contains(exercise.ExerciseId))
                    {
                        ExerciseAssigment exerciseToRemove =
                            workout.ExerciseAssigments.SingleOrDefault(i => i.ExerciseId == exercise.ExerciseId);

                        workout.ExerciseAssigments.Remove(exerciseToRemove);
                        _unitOfWork.WorkoutRepository.SaveAsync();
                    }
                }
            }
        }