diff --git a/Sources/Console/Program.cs b/Sources/Console/Program.cs index e3bd29b..a81ef64 100644 --- a/Sources/Console/Program.cs +++ b/Sources/Console/Program.cs @@ -215,7 +215,6 @@ int menuInscription() n++; continue; } - if(userMngr.checkIfPseudoExists(pseudo)) { Console.Clear(); @@ -235,6 +234,7 @@ int menuInscription() Console.WriteLine("\tInscription réussie !"); Console.ResetColor (); System.Threading.Thread.Sleep(2000); // Pause de 2 secondes + return 0; } diff --git a/Sources/Modèle/Conseil.cs b/Sources/Modèle/Conseil.cs new file mode 100644 index 0000000..7c51a42 --- /dev/null +++ b/Sources/Modèle/Conseil.cs @@ -0,0 +1,66 @@ +using Model; +using Modèle; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.Serialization; + + + +namespace Modèle +{ + /// + /// La classe conseil permet à un utilisateur de poster un conseil sur la page d'un monstre. + /// Il est composé d'un auteur(public), un texte(string), un monstre(Monstre) ainsi que + /// deux méthodes : addConseil et removeConseil + /// + + [DataContract] + public class Conseil // J'ai l'impression d'avoir oublié de faire un truc important masi je sais pas quoi + { + [DataMember(Order = 1)] + // Faire une condition du supression il fut que la personne qui ai créé le conseil soit la même que celle qui suprime le conseil. + public int Id { get; } + int idConseil = 0; // Initialisateur de ID + [DataMember(Order = 2)] + public User Auteur { get; set; } + [DataMember(Order = 3)] + public string Texte { get; private set; } + [DataMember(Order = 4)] + public Monstre LeMonstre { get; set; } + + public Conseil(User auteur, string texte, Monstre leMonstre) + { + if (string.IsNullOrWhiteSpace(texte)) + { + throw new ArgumentException("Vous ne pouvez pas poster un commentaire sans texte !"); + } + + if (auteur == null) + { + throw new ArgumentNullException(nameof(auteur), "L'auteur ne peut pas être nul !"); + } + + if (leMonstre == null) + { + throw new ArgumentNullException(nameof(leMonstre), "Le monstre ne peut pas être nul !"); + } + Id = idConseil; + idConseil++; + Auteur = auteur; + Texte = texte; + LeMonstre = leMonstre; + } + // Pour afficher les conseils. + public void affichConseil() + { + Console.WriteLine($"Id : {Id}"); + Console.WriteLine($"Auteur : {Auteur.Pseudo}"); + Console.WriteLine($"Monstre : {LeMonstre.Name}"); + Console.WriteLine($"Conseil : {Texte}"); + } + } +} + diff --git a/Sources/Modèle/Monstre.cs b/Sources/Modèle/Monstre.cs index 1c087aa..e72e51f 100644 --- a/Sources/Modèle/Monstre.cs +++ b/Sources/Modèle/Monstre.cs @@ -1,4 +1,5 @@ -using System.ComponentModel; +using Modèle; +using System.ComponentModel; using System.Reflection.Metadata; using System.Runtime.Serialization; @@ -9,33 +10,35 @@ namespace Model public class Monstre { [DataMember(Order = 1)] - public int Id { get; set; } + public int Id { get; set; } // ID [DataMember(Order = 2)] - public string Name { get; set; } + public string Name { get; set; } // Nom [DataMember(Order = 3)] - public string Dangerosite { get; private init; } + public string Dangerosite { get; private init; } // Dangerosité //EN FAIT IL FAUDRAIT FAIRE UN ENUM DU TYPE DE DANGEROSITÉ, pour rajouter lors de //l'affichage de la liste des monstres une couleur selon ça, //genre rouge dangereux, violet hyper dangereux, et vert passif [DataMember(Order = 4)] - public string Description { get; set; } + public string Description { get; set; } // Description [DataMember(Order = 5)] - public List CharacteristicsList + public List CharacteristicsList // Liste des caractéristiques { get; init; } [DataMember(Order = 6)] - public List AppearanceList + public List AppearanceList // Liste des apparences { get; init; } - public Monstre(int id, string name, string danger, string desc, List characList, List appearList) + //public List ListeConseils { get; init; } + + public Monstre(int id, string name, string danger, string desc, List characList, List appearList/*, List conseilList*/) { Id = id; Name = name; @@ -43,11 +46,11 @@ namespace Model Description = desc; CharacteristicsList = characList; AppearanceList = appearList; + //ListeConseils = conseilList; if (string.IsNullOrWhiteSpace(Name) || string.IsNullOrWhiteSpace(Description) || string.IsNullOrWhiteSpace(danger)) { throw new ArgumentException("Un monstre doit avoir un nom, une description et une dangerosité!"); } } } -} - +} \ No newline at end of file diff --git a/Sources/Persistance/LoaderJson.cs b/Sources/Persistance/LoaderJson.cs index 58ecc15..a666991 100644 --- a/Sources/Persistance/LoaderJson.cs +++ b/Sources/Persistance/LoaderJson.cs @@ -2,30 +2,67 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization.Json; using System.Text; +using System.Text.Json; using System.Threading.Tasks; namespace Persistance { public class LoaderJson : IUserDataManager, IMonsterDataManager { + DataContractJsonSerializer jsonUserSerializer = new DataContractJsonSerializer(typeof(List)); + DataContractJsonSerializer jsonMonsterSerializer = new DataContractJsonSerializer(typeof(List)); + MemoryStream memoryStream = new MemoryStream(); List IMonsterDataManager.loadMonsters() { - throw new NotImplementedException(); + List? monstre2; + using (FileStream s2 = File.OpenRead("monsters.json")) + { + monstre2 = jsonMonsterSerializer.ReadObject(s2) as List; + } + return monstre2; + //throw new NotImplementedException(); } List IUserDataManager.loadUsers() { + List? user2; + using (FileStream s2 = File.OpenRead("monsters.json")) + { + user2 = jsonMonsterSerializer.ReadObject(s2) as List; + } + return user2; + //throw new NotImplementedException(); throw new NotImplementedException(); } void IMonsterDataManager.saveMonsters(List monstres) { - throw new NotImplementedException(); + jsonMonsterSerializer.WriteObject(memoryStream, monstres); + using (FileStream s = File.Create("monsters.json")) + using (var writer = JsonReaderWriterFactory.CreateJsonWriter( + memoryStream, + System.Text.Encoding.UTF8, + false, + true)) + { + memoryStream.WriteTo(s); + } } void IUserDataManager.saveUsers(List users) { + jsonMonsterSerializer.WriteObject(memoryStream, users); + using (FileStream s = File.Create("monsters.json")) + using (var writer = JsonReaderWriterFactory.CreateJsonWriter( + memoryStream, + System.Text.Encoding.UTF8, + false, + true)) + { + memoryStream.WriteTo(s); + } throw new NotImplementedException(); } } diff --git a/Sources/Persistance/LoaderXML.cs b/Sources/Persistance/LoaderXML.cs index 013ede2..1563a3e 100644 --- a/Sources/Persistance/LoaderXML.cs +++ b/Sources/Persistance/LoaderXML.cs @@ -12,13 +12,11 @@ using static System.Net.Mime.MediaTypeNames; namespace Persistance { - public class LoaderXML : IUserDataManager, IMonsterDataManager { static string path = "../../../../Persistance/saves/"; - static string fichierXML = "users.xml"; - static string monstreXML = "monsters.xml"; - + static string fichierUserXML = "users.xml"; + static string fichierMonstreXML = "monsters.xml"; public static void sauvegarderListUsers() { @@ -26,14 +24,12 @@ namespace Persistance } List IMonsterDataManager.loadMonsters() { - #region Deserialisation var serialiserXML = new DataContractSerializer(typeof(List)); List monsters; - using (Stream s = File.OpenRead(monstreXML)) + using (Stream s = File.OpenRead(fichierMonstreXML)) { monsters = serialiserXML.ReadObject(s) as List; } - #endregion return monsters; } @@ -48,7 +44,7 @@ namespace Persistance Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), path)); // Setup le chemin d'accès var serialiserXML = new DataContractSerializer(typeof(List)); XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... ) - using (TextWriter tw = File.CreateText(monstreXML)) + using (TextWriter tw = File.CreateText(fichierMonstreXML)) { using (XmlWriter writer = XmlWriter.Create(tw, xmlSettings)) { @@ -63,7 +59,7 @@ namespace Persistance var serialiserXML = new DataContractSerializer(typeof(List)); XmlWriterSettings xmlSettings = new XmlWriterSettings() { Indent = true }; // Pour avoir le format xml dans le fichier ( indentation etc... ) - using (TextWriter tw = File.CreateText(fichierXML)) + using (TextWriter tw = File.CreateText(fichierUserXML)) { using (XmlWriter writer = XmlWriter.Create(tw, xmlSettings)) { @@ -76,7 +72,7 @@ namespace Persistance { var serialiserXML = new DataContractSerializer(typeof(List)); List users; - using (Stream s = File.OpenRead(path + fichierXML)) + using (Stream s = File.OpenRead(path + fichierUserXML)) { users = serialiserXML.ReadObject(s) as List; } diff --git a/Sources/Tests/Monstres_UT.cs b/Sources/Tests/Monstres_UT.cs index 104572b..dd8754c 100644 --- a/Sources/Tests/Monstres_UT.cs +++ b/Sources/Tests/Monstres_UT.cs @@ -1,5 +1,6 @@ using Model; - +using Modèle; + namespace Tests {