public async Task <IActionResult> SetActiveTrainingPlan([FromBody] UserTrainingForm data)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                var trainingPlan = await _context.TrainingPlans.SingleOrDefaultAsync(p => p.Id == data.TrainingPlan.Id);

                if (trainingPlan == null)
                {
                    return(NotFound(data.TrainingPlan));
                }

                var user = await _context.Users.SingleOrDefaultAsync(i => i.Id == data.UserId);

                if (user == null)
                {
                    return(NotFound(data.UserId));
                }
                user.CurrentTrainingPlan = trainingPlan;
                await _context.SaveChangesAsync();

                return(Ok(user));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(StatusCode(500));
            }
        }
        public async Task <IActionResult> RemoveTrainingFromUser([FromBody] UserTrainingForm data)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                var user = await GetUserAsync(data.UserId);

                if (user == null)
                {
                    return(NotFound(data.UserId));
                }

                var trainingPlan = await _context.TrainingPlans.SingleOrDefaultAsync(t => t.Id == data.TrainingPlan.Id);

                if (trainingPlan == null || user.Trainings.All(t => t.Id != trainingPlan.Id))
                {
                    return(NotFound(data.TrainingPlan));
                }
                user.Trainings.Remove(trainingPlan);
                await _context.SaveChangesAsync();

                return(Ok(user));
            }
            catch (Exception e)
            {
                return(StatusCode(500));
            }
        }
        public async Task <IActionResult> AddTrainingToUser([FromBody] UserTrainingForm data)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                var user = await _context.Users.SingleOrDefaultAsync(d => d.Id == data.UserId);

                if (user == null)
                {
                    return(NotFound(data.UserId));
                }

                var trainingPlan = await _context.TrainingPlans.SingleOrDefaultAsync(t => t.Id == data.TrainingPlan.Id);

                if (trainingPlan == null)
                {
                    if (data.TrainingPlan.Id != 0)
                    {
                        return(NotFound(data.TrainingPlan));
                    }
                }
                user.Trainings.Add(data.TrainingPlan);
                await _context.SaveChangesAsync();

                var addedTraining = user.Trainings.LastOrDefault();
                var workoutDays   = new List <TrainingDayWorkout>();
                foreach (var day in addedTraining?.Days)
                {
                    foreach (var workout in _context.Workouts.Where(w => day.Workouts.Any(x => x.Id == w.Id)))
                    {
                        workoutDays.Add(new TrainingDayWorkout {
                            TrainingDay = day, TrainingDayId = day.Id, Workout = workout, WorkoutId = workout.Id
                        });
                    }
                }
                _context.TrainingDayWorkouts.AddRange(workoutDays);
                await _context.SaveChangesAsync();

                user.PrepareSerialize(_context.Workouts.ToList());
                return(Ok(user));
            }
            catch (Exception e)
            {
                return(StatusCode(500));
            }
        }