|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
using DbContextLib;
|
|
|
|
|
using StubbedContextLib;
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
using Entities;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Program
|
|
|
|
@ -11,25 +12,33 @@ class Program
|
|
|
|
|
try {
|
|
|
|
|
using (LibraryContext db = new TrainingStubbedContext())
|
|
|
|
|
{
|
|
|
|
|
AthletesTests(db);
|
|
|
|
|
// AthletesTests(db);
|
|
|
|
|
|
|
|
|
|
ActivityTests(db);
|
|
|
|
|
// ActivityTests(db);
|
|
|
|
|
|
|
|
|
|
DataSourceTests(db);
|
|
|
|
|
// DataSourceTests(db);
|
|
|
|
|
|
|
|
|
|
HeartRateTests(db);
|
|
|
|
|
// HeartRateTests(db);
|
|
|
|
|
|
|
|
|
|
NotificationTests(db);
|
|
|
|
|
// NotificationTests(db);
|
|
|
|
|
|
|
|
|
|
StatisticTests(db);
|
|
|
|
|
// StatisticTests(db);
|
|
|
|
|
|
|
|
|
|
TrainingTests(db);
|
|
|
|
|
// TrainingTests(db);
|
|
|
|
|
|
|
|
|
|
// // Test d'ajout, de modification et de suppression
|
|
|
|
|
// AddUpdateDeleteOperations(db);
|
|
|
|
|
AddUpdateDeleteAthlete(db);
|
|
|
|
|
|
|
|
|
|
// // Test d'emprunt et de retour de livre
|
|
|
|
|
// BorrowAndReturnBook(db);
|
|
|
|
|
AddUpdateDeleteActivity(db);
|
|
|
|
|
|
|
|
|
|
AddUpdateDeleteDataSource(db);
|
|
|
|
|
|
|
|
|
|
AddUpdateDeleteHeartRate(db);
|
|
|
|
|
|
|
|
|
|
AddUpdateDeleteNotification(db);
|
|
|
|
|
|
|
|
|
|
AddUpdateDeleteStatistic(db);
|
|
|
|
|
|
|
|
|
|
AddUpdateDeleteTraining(db);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
@ -355,87 +364,241 @@ class Program
|
|
|
|
|
Console.WriteLine("---------------------------------\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// /// <summary>
|
|
|
|
|
// /// Test d'ajout, de modification et de suppression de livres.
|
|
|
|
|
// /// </summary>
|
|
|
|
|
// /// <param name="db">Contexte de la base de données.</param>
|
|
|
|
|
// static void AddUpdateDeleteOperations(LibraryContext db)
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
// // Ajout d'un nouveau livre
|
|
|
|
|
// var newBook = new BookEntity { Title = "Comment bien réussir son stage", Author = "Abdelfettah HASBANI", Isbn = "TheBest" };
|
|
|
|
|
// // par defaut, l'Id en long est égale à zero et se mettre par la BDD
|
|
|
|
|
// db.BooksSet.Add(newBook);
|
|
|
|
|
// db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
// // Affichage des livres après ajout
|
|
|
|
|
// Console.WriteLine("Livres après ajout :");
|
|
|
|
|
// // .Include pour importer les personnes, ne pas le mettre si pas besoins de personnes
|
|
|
|
|
// foreach (var book in db.BooksSet.Include(b => b.Person))
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine($"\t{book.Id}, {book.Title}, {book.Author}, {book.Isbn}, {book.Person?.FirstName} {book.Person?.LastName}");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // Modification du titre du nouveau livre
|
|
|
|
|
// newBook.Title = "Mes nouvelles dates de stage";
|
|
|
|
|
// db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
// // Affichage des livres après modification
|
|
|
|
|
// Console.WriteLine("Livres après modification :");
|
|
|
|
|
// foreach (var book in db.BooksSet.Include(b => b.Person))
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine($"\t{book.Id}, {book.Title}, {book.Author}, {book.Isbn}, {book.Person?.FirstName} {book.Person?.LastName}");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // Suppression du nouveau livre
|
|
|
|
|
// db.BooksSet.Remove(newBook);
|
|
|
|
|
// db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
// // Affichage des livres après suppression
|
|
|
|
|
// Console.WriteLine("Livres après suppression :");
|
|
|
|
|
// foreach (var book in db.BooksSet.Include(b => b.Person))
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine($"\t{book.Id}, {book.Title}, {book.Author}, {book.Isbn}, {book.Person?.FirstName} {book.Person?.LastName}");
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// /// <summary>
|
|
|
|
|
// /// Test d'emprunt et de retour de livre.
|
|
|
|
|
// /// </summary>
|
|
|
|
|
// /// <param name="db">Contexte de la base de données.</param>
|
|
|
|
|
// static void BorrowAndReturnBook(LibraryContext db)
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine("Test d'emprunt et de retour de livre :");
|
|
|
|
|
// var person = db.PersonsSet.FirstOrDefault();
|
|
|
|
|
// var bookToBorrow = db.BooksSet.FirstOrDefault();
|
|
|
|
|
|
|
|
|
|
// // Retour du livre 1
|
|
|
|
|
// if (bookToBorrow != null)
|
|
|
|
|
// {
|
|
|
|
|
// bookToBorrow.Person = null;
|
|
|
|
|
// db.SaveChanges();
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // Affichage des livres après retour
|
|
|
|
|
// Console.WriteLine("Livres après retour :");
|
|
|
|
|
// foreach (var book in db.BooksSet.Include(b => b.Person))
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine($"\t{book.Id}, {book.Title}, {book.Author}, {book.Isbn}, {book.Person?.FirstName} {book.Person?.LastName}");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // Emprunt d'un livre par une personne existante
|
|
|
|
|
// if (person != null && bookToBorrow != null)
|
|
|
|
|
// {
|
|
|
|
|
// bookToBorrow.Person = person;
|
|
|
|
|
// db.SaveChanges();
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// // Affichage des livres après emprunt
|
|
|
|
|
// Console.WriteLine("Livres après emprunt :");
|
|
|
|
|
// foreach (var book in db.BooksSet.Include(b => b.Person))
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine($"\t{book.Id}, {book.Title}, {book.Author}, {book.Isbn}, {book.Person?.FirstName} {book.Person?.LastName}");
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
static void AddUpdateDeleteAthlete(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
// Ajout d'un nouveau livre
|
|
|
|
|
var newAthlete = new AthleteEntity { Username = "Doe", LastName = "Doe", FirstName = "John", Email = "essaie.example.com", Password = "TheNewPassword", Sexe = "M", Lenght = 1.80, Weight = 90, DateOfBirth = new DateTime(2000, 01, 01), IsCoach = false };
|
|
|
|
|
db.AthletesSet.Add(newAthlete);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
// Affichage des livres après ajout
|
|
|
|
|
Console.WriteLine("Athlete après ajout :");
|
|
|
|
|
foreach (var athlete in db.AthletesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{athlete.IdAthlete} - {athlete.Username}, {athlete.LastName}, {athlete.FirstName}, {athlete.Email}, {athlete.Sexe}, {athlete.Lenght}, {athlete.Weight}, {athlete.DateOfBirth}, {athlete.IsCoach}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Modification du titre du nouveau livre
|
|
|
|
|
newAthlete.Email = "email.example@exemple.com";
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
// Affichage des livres après modification
|
|
|
|
|
Console.WriteLine("Livres après modification :");
|
|
|
|
|
foreach (var athlete in db.AthletesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{athlete.IdAthlete} - {athlete.Username}, {athlete.LastName}, {athlete.FirstName}, {athlete.Email}, {athlete.Sexe}, {athlete.Lenght}, {athlete.Weight}, {athlete.DateOfBirth}, {athlete.IsCoach}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Suppression du nouveau livre
|
|
|
|
|
db.AthletesSet.Remove(newAthlete);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
// Affichage des livres après suppression
|
|
|
|
|
Console.WriteLine("Livres après suppression :");
|
|
|
|
|
foreach (var athlete in db.AthletesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{athlete.IdAthlete} - {athlete.Username}, {athlete.LastName}, {athlete.FirstName}, {athlete.Email}, {athlete.Sexe}, {athlete.Lenght}, {athlete.Weight}, {athlete.DateOfBirth}, {athlete.IsCoach}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void AddUpdateDeleteActivity(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
var newActivity = new ActivityEntity { Type = "Running", Date = new DateTime(2022, 01, 01), StartTime = new DateTime(2022, 01, 01, 12, 00, 00), EndTime = new DateTime(2022, 01, 01, 13, 00, 00), EffortFelt = 5, Variability = 10, Variance = 20, StandardDeviation = 30, Average = 40, Maximum = 50, Minimum = 60, AverageTemperature = 70, HasAutoPause = false };
|
|
|
|
|
db.ActivitiesSet.Add(newActivity);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Activité après ajout :");
|
|
|
|
|
foreach (var activity in db.ActivitiesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{activity.IdActivity} - {activity.Type}, {activity.Date}, {activity.StartTime}, {activity.EndTime}, {activity.EffortFelt}, {activity.Variability}, {activity.Variance}, {activity.StandardDeviation}, {activity.Average}, {activity.Maximum}, {activity.Minimum}, {activity.AverageTemperature}, {activity.HasAutoPause}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newActivity.Type = "Cycling";
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Activité après modification :");
|
|
|
|
|
foreach (var activity in db.ActivitiesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{activity.IdActivity} - {activity.Type}, {activity.Date}, {activity.StartTime}, {activity.EndTime}, {activity.EffortFelt}, {activity.Variability}, {activity.Variance}, {activity.StandardDeviation}, {activity.Average}, {activity.Maximum}, {activity.Minimum}, {activity.AverageTemperature}, {activity.HasAutoPause}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.ActivitiesSet.Remove(newActivity);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Activité après suppression :");
|
|
|
|
|
foreach (var activity in db.ActivitiesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{activity.IdActivity} - {activity.Type}, {activity.Date}, {activity.StartTime}, {activity.EndTime}, {activity.EffortFelt}, {activity.Variability}, {activity.Variance}, {activity.StandardDeviation}, {activity.Average}, {activity.Maximum}, {activity.Minimum}, {activity.AverageTemperature}, {activity.HasAutoPause}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void AddUpdateDeleteDataSource(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
var newDataSource = new DataSourceEntity { Type = "Polar", Modele = "Polar Vantage V2", Precision = 0.5F };
|
|
|
|
|
db.DataSourcesSet.Add(newDataSource);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Source de données après ajout :");
|
|
|
|
|
foreach (var dataSource in db.DataSourcesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{dataSource.IdSource} - {dataSource.Type}, {dataSource.Modele}, {dataSource.Precision}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newDataSource.Type = "Garmin";
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Source de données après modification :");
|
|
|
|
|
foreach (var dataSource in db.DataSourcesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{dataSource.IdSource} - {dataSource.Type}, {dataSource.Modele}, {dataSource.Precision}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.DataSourcesSet.Remove(newDataSource);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Source de données après suppression :");
|
|
|
|
|
foreach (var dataSource in db.DataSourcesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{dataSource.IdSource} - {dataSource.Type}, {dataSource.Modele}, {dataSource.Precision}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void AddUpdateDeleteHeartRate(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
var newHeartRate = new HeartRateEntity { Altitude = 100, Time = new DateTime(2022, 01, 01, 12, 00, 00), Temperature = 20, Bpm = 150, Longitude = 0, Latitude = 0 };
|
|
|
|
|
db.HeartRatesSet.Add(newHeartRate);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Fréquence cardiaque après ajout :");
|
|
|
|
|
foreach (var heartRate in db.HeartRatesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{heartRate.IdHeartRate} - {heartRate.Altitude}, {heartRate.Time}, {heartRate.Temperature}, {heartRate.Bpm}, {heartRate.Longitude}, {heartRate.Latitude}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newHeartRate.Altitude = 200;
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Fréquence cardiaque après modification :");
|
|
|
|
|
foreach (var heartRate in db.HeartRatesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{heartRate.IdHeartRate} - {heartRate.Altitude}, {heartRate.Time}, {heartRate.Temperature}, {heartRate.Bpm}, {heartRate.Longitude}, {heartRate.Latitude}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.HeartRatesSet.Remove(newHeartRate);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Fréquence cardiaque après suppression :");
|
|
|
|
|
foreach (var heartRate in db.HeartRatesSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{heartRate.IdHeartRate} - {heartRate.Altitude}, {heartRate.Time}, {heartRate.Temperature}, {heartRate.Bpm}, {heartRate.Longitude}, {heartRate.Latitude}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void AddUpdateDeleteNotification(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
var newNotification = new NotificationEntity { Message = "Message de test", Date = new DateTime(2022, 01, 01), Statut = false, Urgence = "Urgent" };
|
|
|
|
|
db.NotificationsSet.Add(newNotification);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Notification après ajout :");
|
|
|
|
|
foreach (var notification in db.NotificationsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{notification.IdNotif} - {notification.Message}, {notification.Date}, {notification.Statut}, {notification.Urgence}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newNotification.Message = "Nouveau message de test";
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Notification après modification :");
|
|
|
|
|
foreach (var notification in db.NotificationsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{notification.IdNotif} - {notification.Message}, {notification.Date}, {notification.Statut}, {notification.Urgence}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.NotificationsSet.Remove(newNotification);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Notification après suppression :");
|
|
|
|
|
foreach (var notification in db.NotificationsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{notification.IdNotif} - {notification.Message}, {notification.Date}, {notification.Statut}, {notification.Urgence}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void AddUpdateDeleteStatistic(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
var newStatistic = new StatisticEntity { Weight = 80, AverageHeartRate = 150, MaximumHeartRate = 180, AverageCaloriesBurned = 500, Date = new DateTime(2022, 01, 01) };
|
|
|
|
|
db.StatisticsSet.Add(newStatistic);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Statistique après ajout :");
|
|
|
|
|
foreach (var statistic in db.StatisticsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{statistic.IdStatistic} - {statistic.Weight}, {statistic.AverageHeartRate}, {statistic.MaximumHeartRate}, {statistic.AverageCaloriesBurned}, {statistic.Date}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newStatistic.Weight = 90;
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Statistique après modification :");
|
|
|
|
|
foreach (var statistic in db.StatisticsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{statistic.IdStatistic} - {statistic.Weight}, {statistic.AverageHeartRate}, {statistic.MaximumHeartRate}, {statistic.AverageCaloriesBurned}, {statistic.Date}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.StatisticsSet.Remove(newStatistic);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Statistique après suppression :");
|
|
|
|
|
foreach (var statistic in db.StatisticsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{statistic.IdStatistic} - {statistic.Weight}, {statistic.AverageHeartRate}, {statistic.MaximumHeartRate}, {statistic.AverageCaloriesBurned}, {statistic.Date}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void AddUpdateDeleteTraining(LibraryContext db)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("Test d'ajout, de modification et de suppression :");
|
|
|
|
|
|
|
|
|
|
var newTraining = new TrainingEntity { Date = new DateTime(2022, 01, 01), Description = "Entrainement de test", Latitude = 0, Longitude = 0, FeedBack = "Bon entrainement" };
|
|
|
|
|
db.TrainingsSet.Add(newTraining);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Entrainement après ajout :");
|
|
|
|
|
foreach (var training in db.TrainingsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{training.IdTraining} - {training.Date}, {training.Description}, {training.Latitude}, {training.Longitude}, {training.FeedBack}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
newTraining.Description = "Nouvel entrainement de test";
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Entrainement après modification :");
|
|
|
|
|
foreach (var training in db.TrainingsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{training.IdTraining} - {training.Date}, {training.Description}, {training.Latitude}, {training.Longitude}, {training.FeedBack}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
db.TrainingsSet.Remove(newTraining);
|
|
|
|
|
db.SaveChanges();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Entrainement après suppression :");
|
|
|
|
|
foreach (var training in db.TrainingsSet)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"\t{training.IdTraining} - {training.Date}, {training.Description}, {training.Latitude}, {training.Longitude}, {training.FeedBack}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|