У меня есть класс UserData, который содержит всю информацию о пользователе, например, имя, возраст, рост, вес и т. Д. c. У меня также есть класс WorkoutData, который содержит всю информацию о тренировках в тренажерном зале, например, дату, продолжительность тренировки, подробности тренировки, сожженные калории и т. Д. c.
Пользователь может иметь много личных тренировок, связанных с ним, поэтому он также имеет список WorkoutData, который представляет всех пользователей, прошедших тренировки.
Когда пользователь добавляет (публикует) тренировку, мне нужно добавить тренировку в список в объекте UserData, поэтому, когда я получу пользователя, он покажет все тренировки пользователей из списка. Хотя я не совсем уверен, как это сделать, или правильный способ сделать это.
UserData и WorkoutData:
namespace FitnessTracker
{
//holds all user information
public class UserData
{
//Upper bounds for BMI categories
const double SeverelyUnderweightUpper = 15.9;
const double UnderweightUpper = 18.4;
const double NormalWeightUpper = 24.9;
const double OverweightUpper = 29.9;
const double ModeratelyObeseUpper = 34.9;
public int ID { get; set; }
[Required(ErrorMessage = "First Name is required")]
[Display(Name = "First Name")]
[StringLength(20, ErrorMessage = "First name cannot exceed 20 characters. ")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Second Name is required")]
[Display(Name = "Second Name")]
[StringLength(20, ErrorMessage = "Second name cannot exceed 20 characters. ")]
public string SecondName { get; set; }
public string Gender { get; set; }
[Range(5, 110, ErrorMessage = "Please enter a valid age. ")]
public int Age { get; set; }
[Display(Name = "Weight (KG)")]
[Range(5, 150, ErrorMessage = "KG must be between 5 and 150")]
public double WeightKG { get; set; }
[Display(Name = "Height (CM)")]
[Range(5, 220, ErrorMessage = "Height must be between 5 and 220 CM")]
public int HeightCM { get; set; }
//returns a value for user BMR
public double BMR
{
get
{
double bmr = (10 * WeightKG) + (6.25 * HeightCM) - (5 * Age) - 161;
return bmr;
}
}
//show current saved stats, allow to change to up-do-date stats - check BMR/BMI
//return a value for user BMI
public double BMIValue
{
get
{
double bmi = (WeightKG / HeightCM / HeightCM) * 10000;
return bmi;
}
}
public string BMICategory
{
get
{
double userBMI = this.BMIValue;
if(userBMI <= SeverelyUnderweightUpper)
{
return "Severely Underweight";
}
else if(userBMI <= UnderweightUpper)
{
return "Underweight";
}
else if(userBMI <= NormalWeightUpper)
{
return "Normal";
}
else if(userBMI <= OverweightUpper)
{
return "Overweight";
}
else if(userBMI <= ModeratelyObeseUpper)
{
return "Moderately Obese";
}
else
{
throw new Exception("BMI Category Error");
}
}
}
//Users list of personal workouts
public List<WorkoutData> Workouts { get; set; }
}
//holds all workout information such as start/end times, workout details, calories burned etc.
public class WorkoutData
{
public int ID { get; set; }
[Required(ErrorMessage = "Date of workout is required")]
public DateTime Date { get; set; }
[Display(Name = "Workout Length")]
public double WorkoutDuration { get; set; }
[Display(Name = "Workout Details")]
public string WorkoutDetails { get; set; }
[Display(Name = "Calories Burned")]
public int CaloriesBurned { get; set; }
public UserData User { get; set; }
}
}
Мой метод get UserDataController (мне нужно это, чтобы отобразить всех пользователей информация и все тренировки пользователей из списка):
[HttpGet]
public async Task<ActionResult<IEnumerable<UserData>>> GetUsers()
{
return await _context.Users.Include(r => r.Workouts).ToListAsync();
}
Мой метод публикации WorkoutDataController:
[HttpPost]
public async Task<ActionResult<WorkoutData>> PostWorkoutData(WorkoutData workoutData)
{
_context.Workouts.Add(workoutData);
await _context.SaveChangesAsync();
return CreatedAtAction("GetWorkoutData", new { id = workoutData.ID }, workoutData);
}
Может кто-нибудь сказать мне, как добавить тренировку в список пользователей в списке вышеуказанный метод сообщения? Или, если я должен сделать это по-другому, пожалуйста, сообщите