From 910b3c69fcf12f186e6c460071f65a694b633983 Mon Sep 17 00:00:00 2001 From: "remi.lavergne" Date: Sat, 10 Jun 2023 16:21:55 +0200 Subject: [PATCH] =?UTF-8?q?v0.9=20-=20Ajouts:=20Syst=C3=A8me=20de=20commen?= =?UTF-8?q?taire=20;=20Affichage=20des=20genres=20et=20plateformes=20;=20A?= =?UTF-8?q?jout=20de=20la=20persistence=20avec=20JSON=20;=20Modification?= =?UTF-8?q?=20de=20la=20solution=20en=20projets=20;=20Bouton=20d=C3=A9conn?= =?UTF-8?q?exion=20fonctionnel=20;=20Documentation=20du=20Code=20(Models)?= =?UTF-8?q?=20;=20Ajout=20de=20Tests=20Unitaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataContractJSON.cs | 68 +++++++++ .../DataContractPersistance.csproj | 13 ++ .../DataContractXML.cs | 61 ++++++++ .../DataContractPersistance/DataToPersist.cs | 8 +- Sources/GameAtlas/GameAtlas.sln | 16 +- Sources/GameAtlas/GameAtlas/App.xaml.cs | 11 +- .../DataContractPers.cs | 104 ------------- Sources/GameAtlas/GameAtlas/GameAtlas.csproj | 2 + .../GameAtlas/Views/PageAccueil.xaml | 3 - .../GameAtlas/GameAtlas/Views/PageAdmin.xaml | 2 +- .../GameAtlas/Views/PageConnexion.xaml.cs | 3 +- .../GameAtlas/Views/PageInscription.xaml.cs | 11 +- .../GameAtlas/GameAtlas/Views/PageJeu.xaml | 35 ++--- .../GameAtlas/GameAtlas/Views/PageJeu.xaml.cs | 19 ++- .../GameAtlas/Views/PageParcourir.xaml | 2 +- .../GameAtlas/GameAtlas/Views/PageProfil.xaml | 21 ++- .../GameAtlas/Views/PageProfil.xaml.cs | 5 + Sources/GameAtlas/Models/Admin.cs | 11 +- .../GameAtlas/Models/IPersistanceManager.cs | 16 +- Sources/GameAtlas/Models/Jeu.cs | 116 +++++++++++++-- Sources/GameAtlas/Models/Manager.cs | 72 +++++++-- Sources/GameAtlas/Models/Utilisateur.cs | 4 +- .../GameAtlas/{GameAtlas => }/Stub/Stub.cs | 2 +- Sources/GameAtlas/Stub/Stub.csproj | 13 ++ Sources/GameAtlas/Tests/AdminSimulation.cs | 32 ++++ Sources/GameAtlas/Tests/JeuCreation.cs | 94 ++++++++++++ Sources/GameAtlas/Tests/ManagerTest.cs | 139 ++++++++++++++++++ Sources/GameAtlas/Tests/UnitTest1.cs | 17 --- Sources/GameAtlas/Tests/UnitTest2.cs | 22 --- .../GameAtlas/Tests/UtilisateurSimulation.cs | 2 +- 30 files changed, 701 insertions(+), 223 deletions(-) create mode 100644 Sources/GameAtlas/DataContractPersistance/DataContractJSON.cs create mode 100644 Sources/GameAtlas/DataContractPersistance/DataContractPersistance.csproj create mode 100644 Sources/GameAtlas/DataContractPersistance/DataContractXML.cs rename Sources/GameAtlas/{GameAtlas => }/DataContractPersistance/DataToPersist.cs (54%) delete mode 100644 Sources/GameAtlas/GameAtlas/DataContractPersistance/DataContractPers.cs rename Sources/GameAtlas/{GameAtlas => }/Stub/Stub.cs (99%) create mode 100644 Sources/GameAtlas/Stub/Stub.csproj create mode 100644 Sources/GameAtlas/Tests/AdminSimulation.cs create mode 100644 Sources/GameAtlas/Tests/JeuCreation.cs create mode 100644 Sources/GameAtlas/Tests/ManagerTest.cs delete mode 100644 Sources/GameAtlas/Tests/UnitTest1.cs delete mode 100644 Sources/GameAtlas/Tests/UnitTest2.cs diff --git a/Sources/GameAtlas/DataContractPersistance/DataContractJSON.cs b/Sources/GameAtlas/DataContractPersistance/DataContractJSON.cs new file mode 100644 index 0000000..a547100 --- /dev/null +++ b/Sources/GameAtlas/DataContractPersistance/DataContractJSON.cs @@ -0,0 +1,68 @@ +using Models; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.Runtime.Serialization.Json; +using System.IO; +using System.Xml.Serialization; +using System.Collections.ObjectModel; +using System.Text.Json; + +namespace DataContractPersistance +{ + public class DataContractJSON : IPersistanceManager + { + public string FileName { get; set; } = "data.json"; + + public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); + + public (ObservableCollection, List, List) ChargeDonnees() + { + DataContractJsonSerializer JsonSerializer = new DataContractJsonSerializer(typeof(DataToPersist)); + DataToPersist? data = new DataToPersist(); + + using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName))) + { + data = JsonSerializer.ReadObject(s) as DataToPersist; + } + return (data!.Jeux, data.Admins, data.Utilisateurs); + } + + public void SauvegardeDonnees(ObservableCollection jeux, List admins, List users) + { + DataContractJsonSerializer JsonSerializer = new DataContractJsonSerializer(typeof(DataToPersist)); + + if(!Directory.Exists(FilePath)) + { + Debug.WriteLine("Directory créé"); + Debug.WriteLine(Directory.GetDirectoryRoot(FilePath)); + Debug.WriteLine(FilePath); + Directory.CreateDirectory(FilePath); + } + + DataToPersist data = new DataToPersist(); + data.Jeux = jeux; + data.Admins = admins; + data.Utilisateurs = users; + + var settings = new XmlWriterSettings() { Indent = true }; + using (FileStream stream = File.Create(Path.Combine(FilePath, FileName))) + { + using (var writer = JsonReaderWriterFactory.CreateJsonWriter( + stream, + Encoding.UTF8, + false, + true)) // Indentation + { + JsonSerializer.WriteObject(writer, data); + writer.Flush(); + } + } + } + } +} diff --git a/Sources/GameAtlas/DataContractPersistance/DataContractPersistance.csproj b/Sources/GameAtlas/DataContractPersistance/DataContractPersistance.csproj new file mode 100644 index 0000000..6e7c50f --- /dev/null +++ b/Sources/GameAtlas/DataContractPersistance/DataContractPersistance.csproj @@ -0,0 +1,13 @@ + + + + net7.0 + enable + enable + + + + + + + diff --git a/Sources/GameAtlas/DataContractPersistance/DataContractXML.cs b/Sources/GameAtlas/DataContractPersistance/DataContractXML.cs new file mode 100644 index 0000000..40c4ef1 --- /dev/null +++ b/Sources/GameAtlas/DataContractPersistance/DataContractXML.cs @@ -0,0 +1,61 @@ +using Models; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml; +using System.IO; +using System.Xml.Serialization; +using System.Collections.ObjectModel; + +namespace DataContractPersistance +{ + public class DataContractXML : IPersistanceManager + { + public string FileName { get; set; } = "data.xml"; + + public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); + + public (ObservableCollection, List, List) ChargeDonnees() + { + var serializer = new DataContractSerializer(typeof(DataToPersist)); + DataToPersist? data = new DataToPersist(); + + using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName))) + { + data = serializer.ReadObject(s) as DataToPersist; + } + return (data!.Jeux, data.Admins, data.Utilisateurs); + } + + public void SauvegardeDonnees(ObservableCollection jeux, List admins, List users) + { + var serializer = new DataContractSerializer(typeof(DataToPersist)); + + if(!Directory.Exists(FilePath)) + { + Debug.WriteLine("Directory créé"); + Debug.WriteLine(Directory.GetDirectoryRoot(FilePath)); + Debug.WriteLine(FilePath); + Directory.CreateDirectory(FilePath); + } + + DataToPersist data = new DataToPersist(); + data.Jeux = jeux; + data.Admins = admins; + data.Utilisateurs = users; + + var settings = new XmlWriterSettings() { Indent = true }; + using (TextWriter tw = File.CreateText(Path.Combine(FilePath, FileName))) + { + using (XmlWriter writer = XmlWriter.Create(tw, settings)) + { + serializer.WriteObject(writer, data); + } + } + } + } +} diff --git a/Sources/GameAtlas/GameAtlas/DataContractPersistance/DataToPersist.cs b/Sources/GameAtlas/DataContractPersistance/DataToPersist.cs similarity index 54% rename from Sources/GameAtlas/GameAtlas/DataContractPersistance/DataToPersist.cs rename to Sources/GameAtlas/DataContractPersistance/DataToPersist.cs index 511eb76..be93e1f 100644 --- a/Sources/GameAtlas/GameAtlas/DataContractPersistance/DataToPersist.cs +++ b/Sources/GameAtlas/DataContractPersistance/DataToPersist.cs @@ -6,12 +6,12 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace GameAtlas.DataContractPersistance +namespace DataContractPersistance { public class DataToPersist { - public ObservableCollection jeux { get; set; } = new ObservableCollection(); - public List admins { get; set; } = new List(); - public List utilisateurs { get; set; } = new List(); + public ObservableCollection Jeux { get; set; } = new ObservableCollection(); + public List Admins { get; set; } = new List(); + public List Utilisateurs { get; set; } = new List(); } } diff --git a/Sources/GameAtlas/GameAtlas.sln b/Sources/GameAtlas/GameAtlas.sln index 6cf5783..ba41a6c 100644 --- a/Sources/GameAtlas/GameAtlas.sln +++ b/Sources/GameAtlas/GameAtlas.sln @@ -5,9 +5,13 @@ VisualStudioVersion = 17.0.31611.283 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GameAtlas", "GameAtlas\GameAtlas.csproj", "{D3C0D86A-FF1B-4C1B-AA60-537889127607}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Models", "Models\Models.csproj", "{0B50E976-EC7C-4A88-96DA-632162084160}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Models", "Models\Models.csproj", "{0B50E976-EC7C-4A88-96DA-632162084160}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{6DD3E0DA-035C-411E-ABB4-794181D25A72}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{6DD3E0DA-035C-411E-ABB4-794181D25A72}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataContractPersistance", "DataContractPersistance\DataContractPersistance.csproj", "{B8902707-9F3B-41D0-8D5C-72ABED9323C2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stub", "Stub\Stub.csproj", "{A6BAE3C5-B7EB-4090-9050-65721F861DD4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -29,6 +33,14 @@ Global {6DD3E0DA-035C-411E-ABB4-794181D25A72}.Debug|Any CPU.Build.0 = Debug|Any CPU {6DD3E0DA-035C-411E-ABB4-794181D25A72}.Release|Any CPU.ActiveCfg = Release|Any CPU {6DD3E0DA-035C-411E-ABB4-794181D25A72}.Release|Any CPU.Build.0 = Release|Any CPU + {B8902707-9F3B-41D0-8D5C-72ABED9323C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B8902707-9F3B-41D0-8D5C-72ABED9323C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B8902707-9F3B-41D0-8D5C-72ABED9323C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B8902707-9F3B-41D0-8D5C-72ABED9323C2}.Release|Any CPU.Build.0 = Release|Any CPU + {A6BAE3C5-B7EB-4090-9050-65721F861DD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6BAE3C5-B7EB-4090-9050-65721F861DD4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6BAE3C5-B7EB-4090-9050-65721F861DD4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6BAE3C5-B7EB-4090-9050-65721F861DD4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Sources/GameAtlas/GameAtlas/App.xaml.cs b/Sources/GameAtlas/GameAtlas/App.xaml.cs index b5acf28..482eea9 100644 --- a/Sources/GameAtlas/GameAtlas/App.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/App.xaml.cs @@ -1,13 +1,14 @@ using Models; +using Stub; +using DataContractPersistance; using GameAtlas.Views; -using GameAtlas.Stub; namespace GameAtlas; public partial class App : Application { - public string FileName { get; set; } = "data.xml"; + public string FileName { get; set; } = "data.json"; // data.xml public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); @@ -18,7 +19,8 @@ public partial class App : Application if (File.Exists(Path.Combine(FilePath, FileName))) { - MyManager = new Manager(new DataContractPersistance.DataContractPers()); + //MyManager = new Manager(new DataContractPersistance.DataContractXML()); + MyManager = new Manager(new DataContractPersistance.DataContractJSON()); } @@ -29,7 +31,8 @@ public partial class App : Application if (!File.Exists(Path.Combine(FilePath, FileName))) { - MyManager.Persistance = new DataContractPersistance.DataContractPers(); + //MyManager.Persistance = new DataContractPersistance.DataContractXML(); + MyManager.Persistance = new DataContractPersistance.DataContractJSON(); } diff --git a/Sources/GameAtlas/GameAtlas/DataContractPersistance/DataContractPers.cs b/Sources/GameAtlas/GameAtlas/DataContractPersistance/DataContractPers.cs deleted file mode 100644 index 77b415d..0000000 --- a/Sources/GameAtlas/GameAtlas/DataContractPersistance/DataContractPers.cs +++ /dev/null @@ -1,104 +0,0 @@ -using Models; -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml; -using System.IO; -using System.Xml.Serialization; -using System.Collections.ObjectModel; - -namespace GameAtlas.DataContractPersistance -{ - public class DataContractPers : IPersistanceManager - { - public string FileName { get; set; } = "data.xml"; - - public string FilePath { get; set; } = Path.Combine(AppDomain.CurrentDomain.BaseDirectory); //Environment.GetFolderPath(Environment.SpecialFolder.Personal) + "/data"; - - public (ObservableCollection, List, List) ChargeDonnees() - { - var serializer = new DataContractSerializer(typeof(DataToPersist)); - DataToPersist data = new DataToPersist(); - - using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName))) - { - data = serializer.ReadObject(s) as DataToPersist; - } - return (data.jeux, data.admins, data.utilisateurs); - } - - public void SauvegardeDonnees(ObservableCollection jeux, List admins, List users) - { - var serializer = new DataContractSerializer(typeof(DataToPersist)); - - if(!Directory.Exists(FilePath)) - { - Debug.WriteLine("Directory créé"); - Debug.WriteLine(Directory.GetDirectoryRoot(FilePath)); - Debug.WriteLine(FilePath); - Directory.CreateDirectory(FilePath); - } - - DataToPersist data = new DataToPersist(); - data.jeux = jeux; - data.admins = admins; - data.utilisateurs = users; - - var settings = new XmlWriterSettings() { Indent = true }; - using (TextWriter tw = File.CreateText(Path.Combine(FilePath, FileName))) - { - using (XmlWriter writer = XmlWriter.Create(tw, settings)) - { - serializer.WriteObject(writer, data); - } - } - - /*using (Stream s = File.Create(Path.Combine(FilePath, FileName))) - { - serializer.WriteObject(s, users); - }*/ - } - - public void SauvegardeUser(Utilisateur user) - { - var serializer = new DataContractSerializer(typeof(List)); - - if (!Directory.Exists(FilePath)) - { - Debug.WriteLine("Directory créé"); - Debug.WriteLine(FilePath); - Directory.CreateDirectory(FilePath); - } - - var settings = new XmlWriterSettings() { Indent = true }; - using (TextWriter tw = File.CreateText(Path.Combine(FilePath, FileName))) - { - using (XmlWriter writer = XmlWriter.Create(tw, settings)) - { - serializer.WriteObject(writer, new List { user }); - } - } - - Debug.WriteLine("Un utilisateur a été sauvegardé !"); - } - - - /*public (List, List) ChargeDonnees2() - { - var serializer = new DataContractSerializer(typeof(List)); - - DataToPersist data; - using (Stream s = File.OpenRead(Path.Combine(FilePath, FileName))) - { - data = serializer.ReadObject(s) as DataToPersist; - } - return (data.jeux, data.users); - }*/ - - - } -} diff --git a/Sources/GameAtlas/GameAtlas/GameAtlas.csproj b/Sources/GameAtlas/GameAtlas/GameAtlas.csproj index f05dd93..73bc931 100644 --- a/Sources/GameAtlas/GameAtlas/GameAtlas.csproj +++ b/Sources/GameAtlas/GameAtlas/GameAtlas.csproj @@ -135,6 +135,8 @@ + + diff --git a/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml b/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml index cf1d421..ca35a56 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml +++ b/Sources/GameAtlas/GameAtlas/Views/PageAccueil.xaml @@ -5,9 +5,6 @@ xmlns:views="clr-namespace:GameAtlas.Views.Composants" x:Class="GameAtlas.Views.PageAcceuil" Title="ACCUEIL"> - - - diff --git a/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml b/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml index 86da440..7c672f1 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml +++ b/Sources/GameAtlas/GameAtlas/Views/PageAdmin.xaml @@ -4,7 +4,7 @@ x:Class="GameAtlas.Views.PageAdmin" Title="Page Admin"> - + diff --git a/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs index 90d8d77..30aca9d 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageConnexion.xaml.cs @@ -54,7 +54,8 @@ public partial class PageConnexion : ContentPage */ private async void OnInscrire_Tapped(object sender, EventArgs e) { - await Navigation.PushAsync(new PageInscription()); + await Navigation.PushModalAsync(new PageInscription()); + } /** diff --git a/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs b/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs index f60f8a7..2200f17 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs +++ b/Sources/GameAtlas/GameAtlas/Views/PageInscription.xaml.cs @@ -1,15 +1,18 @@ namespace GameAtlas.Views; using Models; -using GameAtlas.DataContractPersistance; +using DataContractPersistance; using System.Diagnostics; using System.Text.RegularExpressions; +using CommunityToolkit.Maui.Core; +using CommunityToolkit.Maui.Alerts; +using Font = Microsoft.Maui.Font; public partial class PageInscription : ContentPage { - DataContractPers PersistanceManager = new DataContractPers(); public Manager InscriptionManager => (App.Current as App).MyManager; + public PageInscription() { InitializeComponent(); @@ -45,10 +48,9 @@ public partial class PageInscription : ContentPage Utilisateur utilisateur = new Utilisateur(mail, username, password); InscriptionManager.AddUtilisateur(utilisateur); InscriptionManager.SauvegardeDonnees(); - //PersistanceManager.SauvegardeUser(utilisateur); Debug.WriteLine(InscriptionManager.Utilisateurs.Count); - //await Navigation.PushAsync(new PageAcceuil()); + await DisplayAlert("Compte crer avec succs !","Vous pouvez maintenant vous connecter.", cancel: "Ok"); await Shell.Current.GoToAsync("//page/PageAccueil"); @@ -86,4 +88,5 @@ public partial class PageInscription : ContentPage } + } \ No newline at end of file diff --git a/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml b/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml index 866cf40..f513864 100644 --- a/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml +++ b/Sources/GameAtlas/GameAtlas/Views/PageJeu.xaml @@ -4,7 +4,7 @@ x:Class="GameAtlas.Views.PageJeu" Title="PageJeu"> - + @@ -39,15 +39,7 @@