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(); } } } }