diff --git a/API/API.csproj.user b/API/API.csproj.user new file mode 100644 index 0000000..9ff5820 --- /dev/null +++ b/API/API.csproj.user @@ -0,0 +1,6 @@ + + + + https + + \ No newline at end of file diff --git a/APIConsole/APIConsole.csproj b/APIConsole/APIConsole.csproj new file mode 100644 index 0000000..2f4fc77 --- /dev/null +++ b/APIConsole/APIConsole.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/APIConsole/Program.cs b/APIConsole/Program.cs new file mode 100644 index 0000000..e5dff12 --- /dev/null +++ b/APIConsole/Program.cs @@ -0,0 +1,3 @@ +// See https://aka.ms/new-console-template for more information + +Console.WriteLine("Hello, World!"); \ No newline at end of file diff --git a/AppContext/AppContext.cs b/AppContext/AppContext.cs index f875684..5a2eb8f 100644 --- a/AppContext/AppContext.cs +++ b/AppContext/AppContext.cs @@ -26,23 +26,19 @@ public class AppContext : DbContext protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { - base.OnConfiguring(optionsBuilder); - if (optionsBuilder.IsConfigured) + if (!optionsBuilder.IsConfigured) { - return; - } - - var pgsqliteDsn = Environment.GetEnvironmentVariable("PGSQL_DSN"); + var pgsqliteDsn = Environment.GetEnvironmentVariable("PGSQL_DSN"); - if (pgsqliteDsn != null) - { - optionsBuilder.UseNpgsql(pgsqliteDsn); + if (pgsqliteDsn != null) + { + optionsBuilder.UseNpgsql(pgsqliteDsn); + } + else + { + optionsBuilder.UseSqlite("Data Source=database.db"); + } } - else - { - optionsBuilder.UseSqlite("Data Source=database.db"); - } - } protected override void OnModelCreating(ModelBuilder builder) diff --git a/EFConsole/EFConsole.csproj b/EFConsole/EFConsole.csproj new file mode 100644 index 0000000..5873ce1 --- /dev/null +++ b/EFConsole/EFConsole.csproj @@ -0,0 +1,25 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/EFConsole/MembersConsole.cs b/EFConsole/MembersConsole.cs new file mode 100644 index 0000000..5b70248 --- /dev/null +++ b/EFConsole/MembersConsole.cs @@ -0,0 +1,88 @@ +using System; +using System.Linq; +using AppContext.Entities; +using Model; + +namespace EFConsole +{ + public class MembersConsole + { + public static void TestAddMember(AppContext.AppContext db) + { + var newMember = new MemberEntity + { + TeamId = 1, + UserId = 1, + Role = MemberRole.Player + }; + + db.Members.Add(newMember); + db.SaveChanges(); + + Console.WriteLine("Membre ajouté avec succès !"); + } + + public static void TestGetAllMembers(AppContext.AppContext db) + { + var members = db.Members.ToList(); + Console.WriteLine("Liste des membres :"); + foreach (var member in members) + { + Console.WriteLine($"ID Équipe : {member.TeamId}, ID Utilisateur : {member.UserId}, Rôle : {member.Role}"); + } + } + + public static void TestGetMembersByTeamId(AppContext.AppContext db, int teamId) + { + var members = db.Members.Where(m => m.TeamId == teamId).ToList(); + Console.WriteLine($"Membres de l'équipe avec ID {teamId} :"); + foreach (var member in members) + { + Console.WriteLine($"ID Équipe : {member.TeamId}, ID Utilisateur : {member.UserId}, Rôle : {member.Role}"); + } + } + + public static void TestGetMembersByUserId(AppContext.AppContext db, int userId) + { + var members = db.Members.Where(m => m.UserId == userId).ToList(); + Console.WriteLine($"Membres associés à l'utilisateur avec ID {userId} :"); + foreach (var member in members) + { + Console.WriteLine($"ID Équipe : {member.TeamId}, ID Utilisateur : {member.UserId}, Rôle : {member.Role}"); + } + } + + public static void TestUpdateMemberRole(AppContext.AppContext db, int teamId, int memberId, MemberRole newRole) + { + var memberToUpdate = db.Members.FirstOrDefault(m => m.TeamId == teamId && m.UserId == memberId); // Trouver le membre dans l'équipe spécifiée + if (memberToUpdate != null) + { + memberToUpdate.Role = newRole; + db.SaveChanges(); + Console.WriteLine("Rôle du membre mis à jour avec succès !"); + } + else + { + Console.WriteLine($"Aucun membre trouvé dans l'équipe avec l'ID {teamId} et l'ID utilisateur {memberId}."); + } + } + + + public static void TestRemoveMember(AppContext.AppContext db, int teamId, int memberId) + { + var memberToDelete = db.Members.FirstOrDefault(m => m.TeamId == teamId && m.UserId == memberId); // Trouver le membre dans l'équipe spécifiée + if (memberToDelete != null) + { + db.Members.Remove(memberToDelete); // Supprimer le membre + db.SaveChanges(); + Console.WriteLine("Membre supprimé avec succès !"); + } + else + { + Console.WriteLine($"Aucun membre trouvé dans l'équipe avec l'ID {teamId} et l'ID utilisateur {memberId} pour la suppression."); + } + } + + + } +} diff --git a/EFConsole/Program.cs b/EFConsole/Program.cs new file mode 100644 index 0000000..2c101f9 --- /dev/null +++ b/EFConsole/Program.cs @@ -0,0 +1,85 @@ +using Model; +using StubContext; + +namespace EFConsole +{ + class Program + { + static void Main(string[] args) + { + Console.OutputEncoding = System.Text.Encoding.UTF8; + + try + { + using (AppContext.AppContext db = new StubAppContext()) + { + TestUserMethods(db); + TestTacticMethods(db); + TestTeamMethods(db); + TestMemberMethods(db); + TestTacticsStepMethods(db); + } + } + catch (Exception ex) + { + Console.WriteLine($"Une erreur s'est produite : {ex.Message}"); + + if (ex.InnerException != null) + { + Console.WriteLine($"Détails de l'exception interne : {ex.InnerException.Message}"); + } + } + } + + static void TestUserMethods(AppContext.AppContext db) + { + UsersConsole.TestAddUser(db); + UsersConsole.TestGetAllUsers(db); + UsersConsole.TestFindUserByMail(db, "maxime@mail.com"); + UsersConsole.TestUpdateUser(db); + UsersConsole.TestDeleteUser(db); + UsersConsole.TestSearchUsersByName(db, "Pierre"); + UsersConsole.TestGetTacticsOfAllUsers(db); + UsersConsole.TestGetTacticsOfOneUser(db, 1); + } + + static void TestTacticMethods(AppContext.AppContext db) + { + TacticsConsole.TestAddTactic(db); + TacticsConsole.TestGetAllTactics(db); + TacticsConsole.TestFindTacticById(db, 1); + TacticsConsole.TestUpdateTactic(db, 1, "Nouveau nom"); + TacticsConsole.TestDeleteTactic(db, 1); + TacticsConsole.TestGetTacticsByOwner(db, 1); + } + + static void TestTeamMethods(AppContext.AppContext db) + { + TeamsConsole.TestAddTeam(db); + TeamsConsole.TestGetAllTeams(db); + TeamsConsole.TestGetTeamMembers(db, 1); + TeamsConsole.TestUpdateTeam(db, 1, "Nouveau nom", "Nouvelle image", "#FF0000", "#00FF00"); + TeamsConsole.TestDeleteTeam(db, 1); + } + + static void TestMemberMethods(AppContext.AppContext db) + { + MembersConsole.TestAddMember(db); + MembersConsole.TestGetAllMembers(db); + MembersConsole.TestGetMembersByTeamId(db, 1); + MembersConsole.TestGetMembersByUserId(db, 1); + MembersConsole.TestUpdateMemberRole(db, 1, 1, MemberRole.Coach); + MembersConsole.TestRemoveMember(db, 1, 1); + } + + static void TestTacticsStepMethods(AppContext.AppContext db) + { + TacticsStepConsole.TestAddTacticStep(db); + TacticsStepConsole.TestGetAllTacticSteps(db); + TacticsStepConsole.TestGetTacticStepsByTacticId(db, 1); + TacticsStepConsole.TestUpdateTacticStepContent(db, 1, "test content"); + TacticsStepConsole.TestDeleteTacticStep(db, 1); + } + + } +} \ No newline at end of file diff --git a/EFConsole/TacticsConsole.cs b/EFConsole/TacticsConsole.cs new file mode 100644 index 0000000..dd29d2e --- /dev/null +++ b/EFConsole/TacticsConsole.cs @@ -0,0 +1,89 @@ +using System; +using System.Linq; +using AppContext.Entities; +using Model; + +namespace EFConsole +{ + class TacticsConsole + { + internal static void TestAddTactic(AppContext.AppContext db) + { + var newTactic = new TacticEntity + { + Name = "Nouvelle tactique", + CreationDate = DateTime.Now, + OwnerId = 1, + Type = CourtType.Plain + }; + + db.Tactics.Add(newTactic); + db.SaveChanges(); + + Console.WriteLine("Tactique ajoutée avec succès !"); + } + + internal static void TestGetAllTactics(AppContext.AppContext db) + { + var tactics = db.Tactics.ToList(); + Console.WriteLine("Liste des tactiques :"); + foreach (var tactic in tactics) + { + Console.WriteLine($"ID : {tactic.Id}, Nom : {tactic.Name}, Date de création : {tactic.CreationDate}"); + } + } + + internal static void TestFindTacticById(AppContext.AppContext db, int tacticId) + { + var tactic = db.Tactics.FirstOrDefault(t => t.Id == tacticId); + if (tactic != null) + { + Console.WriteLine($"Tactique trouvée avec l'ID {tacticId}: Nom : {tactic.Name}, Date de création : {tactic.CreationDate}"); + } + else + { + Console.WriteLine($"Aucune tactique trouvée avec l'ID {tacticId}"); + } + } + + internal static void TestUpdateTactic(AppContext.AppContext db, int tacticId, string newName) + { + var tacticToUpdate = db.Tactics.FirstOrDefault(t => t.Id == tacticId); + if (tacticToUpdate != null) + { + tacticToUpdate.Name = newName; + db.SaveChanges(); + Console.WriteLine($"Tactique mise à jour avec succès !"); + } + else + { + Console.WriteLine($"Aucune tactique trouvée avec l'ID {tacticId}"); + } + } + + internal static void TestDeleteTactic(AppContext.AppContext db, int tacticId) + { + var tacticToDelete = db.Tactics.FirstOrDefault(t => t.Id == tacticId); + if (tacticToDelete != null) + { + db.Tactics.Remove(tacticToDelete); + db.SaveChanges(); + Console.WriteLine($"Tactique supprimée avec succès !"); + } + else + { + Console.WriteLine($"Aucune tactique trouvée avec l'ID {tacticId}"); + } + } + + internal static void TestGetTacticsByOwner(AppContext.AppContext db, int ownerId) + { + var tactics = db.Tactics.Where(t => t.OwnerId == ownerId).ToList(); + Console.WriteLine($"Tactiques de l'utilisateur avec l'ID {ownerId} :"); + foreach (var tactic in tactics) + { + Console.WriteLine($"ID : {tactic.Id}, Nom : {tactic.Name}, Date de création : {tactic.CreationDate}"); + } + } + } +} diff --git a/EFConsole/TacticsStepConsole.cs b/EFConsole/TacticsStepConsole.cs new file mode 100644 index 0000000..3bca4fa --- /dev/null +++ b/EFConsole/TacticsStepConsole.cs @@ -0,0 +1,75 @@ +using System; +using System.Linq; +using AppContext.Entities; +using Model; + +namespace EFConsole +{ + public class TacticsStepConsole + { + public static void TestAddTacticStep(AppContext.AppContext db) + { + var newTacticStep = new TacticStepEntity + { + ParentId = 1, + TacticId = 1, + JsonContent = "{}" + }; + + db.TacticSteps.Add(newTacticStep); + db.SaveChanges(); + + Console.WriteLine("Étape de tactique ajoutée avec succès !"); + } + + public static void TestGetAllTacticSteps(AppContext.AppContext db) + { + var tacticSteps = db.TacticSteps.ToList(); + Console.WriteLine("Liste des étapes de tactique :"); + foreach (var tacticStep in tacticSteps) + { + Console.WriteLine($"ID : {tacticStep.Id}, ID Tactique : {tacticStep.TacticId}, Contenu JSON : {tacticStep.JsonContent}"); + } + } + + public static void TestGetTacticStepsByTacticId(AppContext.AppContext db, int tacticId) + { + var tacticSteps = db.TacticSteps.Where(ts => ts.TacticId == tacticId).ToList(); + Console.WriteLine($"Étapes de tactique pour la tactique avec l'ID {tacticId} :"); + foreach (var tacticStep in tacticSteps) + { + Console.WriteLine($"ID : {tacticStep.Id}, ID Tactique : {tacticStep.TacticId}, Contenu JSON : {tacticStep.JsonContent}"); + } + } + + public static void TestUpdateTacticStepContent(AppContext.AppContext db, int tacticStepId, string newContent) + { + var tacticStepToUpdate = db.TacticSteps.FirstOrDefault(ts => ts.Id == tacticStepId); + if (tacticStepToUpdate != null) + { + tacticStepToUpdate.JsonContent = newContent; + db.SaveChanges(); + Console.WriteLine("Contenu de l'étape de tactique mis à jour avec succès !"); + } + else + { + Console.WriteLine($"Aucune étape de tactique trouvée avec l'ID {tacticStepId} pour la mise à jour du contenu."); + } + } + + public static void TestDeleteTacticStep(AppContext.AppContext db, int tacticStepId) + { + var tacticStepToDelete = db.TacticSteps.FirstOrDefault(ts => ts.Id == tacticStepId); + if (tacticStepToDelete != null) + { + db.TacticSteps.Remove(tacticStepToDelete); + db.SaveChanges(); + Console.WriteLine("Étape de tactique supprimée avec succès !"); + } + else + { + Console.WriteLine($"Aucune étape de tactique trouvée avec l'ID {tacticStepId} pour la suppression."); + } + } + } +} diff --git a/EFConsole/TeamsConsole.cs b/EFConsole/TeamsConsole.cs new file mode 100644 index 0000000..017739a --- /dev/null +++ b/EFConsole/TeamsConsole.cs @@ -0,0 +1,85 @@ +using System; +using System.Linq; +using AppContext.Entities; + +namespace EFConsole +{ + class TeamsConsole + { + internal static void TestAddTeam(AppContext.AppContext db) + { + var newTeam = new TeamEntity + { + Name = "Nouvelle équipe", + Picture = "https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_960_720.png", + MainColor = "#0000FF", + SecondColor = "#FFFFFF" + }; + + db.Teams.Add(newTeam); + db.SaveChanges(); + + Console.WriteLine("Équipe ajoutée avec succès !"); + } + + internal static void TestGetAllTeams(AppContext.AppContext db) + { + var teams = db.Teams.ToList(); + Console.WriteLine("Liste des équipes :"); + foreach (var team in teams) + { + Console.WriteLine($"ID : {team.Id}, Nom : {team.Name}, Image : {team.Picture}, Couleur principale : {team.MainColor}, Couleur secondaire : {team.SecondColor}"); + } + } + + internal static void TestGetTeamMembers(AppContext.AppContext db, int teamId) + { + var team = db.Teams.FirstOrDefault(t => t.Id == teamId); + if (team != null) + { + Console.WriteLine($"Membres de l'équipe '{team.Name}' :"); + foreach (var member in team.Members) + { + Console.WriteLine($"ID : {member.UserId}, Nom : {member.User?.Name}, Rôle : {member.Role}"); + } + } + else + { + Console.WriteLine($"Aucune équipe trouvée avec l'ID : {teamId}"); + } + } + + internal static void TestUpdateTeam(AppContext.AppContext db, int teamId, string newName, string newPicture, string newMainColor, string newSecondColor) + { + var teamToUpdate = db.Teams.FirstOrDefault(t => t.Id == teamId); + if (teamToUpdate != null) + { + teamToUpdate.Name = newName; + teamToUpdate.Picture = newPicture; + teamToUpdate.MainColor = newMainColor; + teamToUpdate.SecondColor = newSecondColor; + db.SaveChanges(); + Console.WriteLine("Équipe mise à jour avec succès !"); + } + else + { + Console.WriteLine($"Aucune équipe trouvée avec l'ID : {teamId}"); + } + } + + internal static void TestDeleteTeam(AppContext.AppContext db, int teamId) + { + var teamToDelete = db.Teams.FirstOrDefault(t => t.Id == teamId); + if (teamToDelete != null) + { + db.Teams.Remove(teamToDelete); + db.SaveChanges(); + Console.WriteLine("Équipe supprimée avec succès !"); + } + else + { + Console.WriteLine($"Aucune équipe trouvée avec l'ID : {teamId}"); + } + } + } +} diff --git a/EFConsole/UsersConsole.cs b/EFConsole/UsersConsole.cs new file mode 100644 index 0000000..d96aaa6 --- /dev/null +++ b/EFConsole/UsersConsole.cs @@ -0,0 +1,120 @@ +using Microsoft.EntityFrameworkCore; + +namespace EFConsole; + + +class UsersConsole +{ + internal static void TestAddUser(AppContext.AppContext db) + { + var newUser = new AppContext.Entities.UserEntity + { + Name = "Pierre", + Email = "pierre@mail.com", + Password = "123456", + ProfilePicture = "https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_960_720.png", + IsAdmin = false + }; + + db.Users.Add(newUser); + db.SaveChanges(); + + Console.WriteLine("Utilisateur ajouté avec succès !"); + } + + internal static void TestGetAllUsers(AppContext.AppContext db) + { + var users = db.Users.ToList(); + Console.WriteLine("Liste des utilisateurs :"); + foreach (var user in users) + { + Console.WriteLine($"ID : {user.Id}, Nom : {user.Name}, Email : {user.Email}"); + } + } + + internal static void TestFindUserByMail(AppContext.AppContext db, string userEmail) + { + var userByEmail = db.Users.FirstOrDefault(u => u.Email == userEmail); + if (userByEmail != null) + { + Console.WriteLine($"Utilisateur trouvé par email : {userByEmail.Name}"); + } + else + { + Console.WriteLine($"Aucun utilisateur trouvé avec l'email : {userEmail}"); + } + } + + internal static void TestUpdateUser(AppContext.AppContext db) + { + var userToUpdate = db.Users.FirstOrDefault(u => u.Name == "Pierre"); + if (userToUpdate != null) + { + userToUpdate.Name = "Paul"; + db.SaveChanges(); + Console.WriteLine("Utilisateur mis à jour avec succès !"); + } + else + { + Console.WriteLine("Utilisateur non trouvé pour la mise à jour."); + } + } + + internal static void TestDeleteUser(AppContext.AppContext db) + { + var userToDelete = db.Users.FirstOrDefault(u => u.Name == "Paul"); + if (userToDelete != null) + { + db.Users.Remove(userToDelete); + db.SaveChanges(); + Console.WriteLine("Utilisateur supprimé avec succès !"); + } + else + { + Console.WriteLine("Utilisateur non trouvé pour la suppression."); + } + } + + internal static void TestSearchUsersByName(AppContext.AppContext db, string userName) + { + var usersByName = db.Users.Where(u => u.Name == userName).ToList(); + Console.WriteLine($"Utilisateurs avec le nom '{userName}' :"); + foreach (var user in usersByName) + { + Console.WriteLine($"ID : {user.Id}, Nom : {user.Name}, Email : {user.Email}"); + } + } + + internal static void TestGetTacticsOfAllUsers(AppContext.AppContext db) + { + Console.WriteLine("Récupération des tactiques de tous les utilisateurs :"); + + var users = db.Users.Include(u => u.Tactics).ToList(); + foreach (var user in users) + { + Console.WriteLine($"Tactiques de l'utilisateur {user.Name}:"); + foreach (var tactic in user.Tactics) + { + Console.WriteLine($"\tID : {tactic.Id}, Nom : {tactic.Name}, Date de création : {tactic.CreationDate}"); + } + } + } + + internal static void TestGetTacticsOfOneUser(AppContext.AppContext db, int userId) + { + var user = db.Users.Include(u => u.Tactics).FirstOrDefault(u => u.Id == userId); + if (user != null) + { + Console.WriteLine($"Récupération des tactiques de l'utilisateur {user.Name}:"); + foreach (var tactic in user.Tactics) + { + Console.WriteLine($"\tID : {tactic.Id}, Nom : {tactic.Name}, Date de création : {tactic.CreationDate}"); + } + } + else + { + Console.WriteLine($"Aucun utilisateur trouvé avec l'ID : {userId}"); + } + } + +} diff --git a/WebAPI.sln b/WebAPI.sln index ba34e6d..a6888fe 100644 --- a/WebAPI.sln +++ b/WebAPI.sln @@ -16,6 +16,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Converters", "Converters\Co EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "UnitTests\UnitTests.csproj", "{82A100BE-5610-4741-8F23-1CD653E8EFCD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EFConsole", "EFConsole\EFConsole.csproj", "{DC9ACDB3-83BC-4DF2-84C7-070361648975}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "APIConsole", "APIConsole\APIConsole.csproj", "{B01BD72E-15D3-4DC6-8DAC-2270A01129A9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -62,5 +66,13 @@ Global {82A100BE-5610-4741-8F23-1CD653E8EFCD}.Debug|Any CPU.Build.0 = Debug|Any CPU {82A100BE-5610-4741-8F23-1CD653E8EFCD}.Release|Any CPU.ActiveCfg = Release|Any CPU {82A100BE-5610-4741-8F23-1CD653E8EFCD}.Release|Any CPU.Build.0 = Release|Any CPU + {DC9ACDB3-83BC-4DF2-84C7-070361648975}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC9ACDB3-83BC-4DF2-84C7-070361648975}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC9ACDB3-83BC-4DF2-84C7-070361648975}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC9ACDB3-83BC-4DF2-84C7-070361648975}.Release|Any CPU.Build.0 = Release|Any CPU + {B01BD72E-15D3-4DC6-8DAC-2270A01129A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B01BD72E-15D3-4DC6-8DAC-2270A01129A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B01BD72E-15D3-4DC6-8DAC-2270A01129A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B01BD72E-15D3-4DC6-8DAC-2270A01129A9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal