public async Task <ActionResult <WorkoutOutputModel> > Edit(WorkoutEditModel model)
        {
            var result = await workoutService.Edit(model);

            if (result == null)
            {
                return(BadRequest());
            }

            return(result);
        }
        public async Task <WorkoutOutputModel> Edit(WorkoutEditModel model)
        {
            var workout = await db.Workouts
                          .FirstOrDefaultAsync(w => w.Id == model.Id && w.IsDeleted == false);

            if (workout == null)
            {
                return(null);
            }

            if (model.Description != workout.Description)
            {
                workout.Description = model.Description;
            }
            if (model.Name != workout.Name)
            {
                workout.Name = model.Name;
            }
            if (model.WorkoutTypeId != workout.WorkoutTypeId)
            {
                workout.WorkoutTypeId = model.WorkoutTypeId;
            }

            var excerciseWorkouts = await db.ExcerciseWorkouts
                                    .Where(ew => ew.WorkoutId == workout.Id && ew.IsDeleted == false)
                                    .ToListAsync();

            foreach (var exWo in model.ExcerciseWorkouts)
            {
                var currentExcerciseWorkout = excerciseWorkouts
                                              .FirstOrDefault(x => x.ExcerciseId == exWo.ExcerciseId);
                if (currentExcerciseWorkout == null)
                {
                    workout.ExcerciseWorkouts.Add(
                        new ExcerciseWorkout
                    {
                        ExcerciseId    = exWo.ExcerciseId,
                        ExecutionOrder = exWo.ExecutionOrder,
                        Repetitions    = exWo.Repetitions
                    });
                }
                else
                {
                    if (exWo.Repetitions != currentExcerciseWorkout.Repetitions)
                    {
                        currentExcerciseWorkout.Repetitions = exWo.Repetitions;
                    }
                    if (exWo.ExecutionOrder != currentExcerciseWorkout.ExecutionOrder)
                    {
                        currentExcerciseWorkout.ExecutionOrder = exWo.ExecutionOrder;
                    }
                }
            }

            var exWoToRemove = excerciseWorkouts
                               .Where(x1 => !model.ExcerciseWorkouts.Any(x2 => x2.ExcerciseId == x1.ExcerciseId))
                               .ToList();

            db.ExcerciseWorkouts.RemoveRange(exWoToRemove);
            var result = await db.SaveChangesAsync();

            if (result == 0)
            {
                return(null);
            }

            return(mapper.Map <WorkoutOutputModel>(workout));
        }