From 7d4366326f11ed0d335d20277f1ba1d0d666ad30 Mon Sep 17 00:00:00 2001 From: Anthony RICHARD Date: Sun, 11 Jun 2023 19:22:04 +0200 Subject: [PATCH] doxygen --- .drone.yml | 4 +- Sources/Stim.Model/Game.cs | 101 +++++++++++++++++++++++++++-- Sources/Stim.Model/IPersistance.cs | 29 +++++++-- Sources/Stim.Model/Manager.cs | 64 +++++++++++++++++- Sources/Stim.Model/Review.cs | 43 ++++++++++-- Sources/Stim.Model/User.cs | 96 ++++++++++++++++++++++++--- Sources/Stim/LoginPage.xaml | 6 +- 7 files changed, 313 insertions(+), 30 deletions(-) diff --git a/.drone.yml b/.drone.yml index ba81de8..dc4d385 100644 --- a/.drone.yml +++ b/.drone.yml @@ -55,8 +55,8 @@ steps: - name: docs path: /docs commands: - #- cd Documentation/doxygen - #- doxygen Doxyfile + - cd Documentation/doxygen + - doxygen Doxyfile - /entrypoint.sh when: branch: diff --git a/Sources/Stim.Model/Game.cs b/Sources/Stim.Model/Game.cs index e4582dc..73e6230 100644 --- a/Sources/Stim.Model/Game.cs +++ b/Sources/Stim.Model/Game.cs @@ -6,10 +6,16 @@ using System.Text; namespace Model { + /// + /// Représente un jeu. + /// [DataContract] public sealed class Game : INotifyPropertyChanged, IEquatable { [DataMember] + /// + /// Obtient ou définit le nom du jeu. + /// public string Name { get => name; @@ -23,6 +29,9 @@ namespace Model private string name = default!; [DataMember] + /// + /// Obtient ou définit la description du jeu. + /// public string Description { get => description; @@ -36,6 +45,9 @@ namespace Model private string description = default!; [DataMember] + /// + /// Obtient ou définit l'année de sortie du jeu. + /// public int Year { get => year; @@ -49,6 +61,9 @@ namespace Model private int year = default!; [DataMember] + /// + /// Obtient ou définit la couverture du jeu. + /// public string Cover { get => cover; @@ -60,7 +75,10 @@ namespace Model } } private string cover = default!; - + + /// + /// Obtient les étiquettes du jeu. + /// public ReadOnlyCollection Tags { get => tags.AsReadOnly(); @@ -74,15 +92,25 @@ namespace Model [DataMember] private List tags; + /// + /// Obtient les avis sur le jeu. + /// public ReadOnlyCollection Reviews => reviews.AsReadOnly(); [DataMember] private readonly List reviews; + /// + /// Obtient la note moyenne du jeu. + /// public double Average => Reviews.Any() ? Math.Round(Reviews.Select(review => review.Rate).Average(), 1) : 0; [DataMember] - public string Lien { + /// + /// Obtient ou définit le lien du jeu. + /// + public string Lien + { get => lien; private set { @@ -93,6 +121,15 @@ namespace Model } private string lien = default!; + /// + /// Initialise une nouvelle instance de la classe avec les valeurs spécifiées. + /// + /// Le nom du jeu. + /// La description du jeu. + /// L'année de sortie du jeu. + /// Les étiquettes du jeu. + /// La couverture du jeu. + /// Le lien du jeu. public Game(string name, string description, int year, List c_tags, string cover, string c_lien) { if (string.IsNullOrWhiteSpace(name)) Name = "Default"; @@ -109,17 +146,29 @@ namespace Model reviews = new List(); } + /// + /// Événement déclenché lorsque la valeur d'une propriété change. + /// public event PropertyChangedEventHandler? PropertyChanged; private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + /// + /// Retourne le code de hachage pour l'objet. + /// + /// Le code de hachage calculé. public override int GetHashCode() { if (string.IsNullOrWhiteSpace(Name)) return 0; - return Name.GetHashCode(); + return Name.GetHashCode(); } + /// + /// Détermine si l'objet spécifié est égal à l'objet actuel. + /// + /// L'objet à comparer avec l'objet actuel. + /// True si les objets sont égaux, sinon False. public override bool Equals(object? obj) { if (object.ReferenceEquals(obj, null)) return false; @@ -128,12 +177,21 @@ namespace Model return this.Equals(obj as Game); } + /// + /// Détermine si l'objet spécifié est égal à l'objet actuel. + /// + /// L'objet à comparer avec l'objet actuel. + /// True si les objets sont égaux, sinon False. public bool Equals(Game? other) { if (string.IsNullOrWhiteSpace(Name)) return false; return other != null && Name.Equals(other.Name); } + /// + /// Retourne une chaîne qui représente l'objet courant. + /// + /// Une chaîne qui représente l'objet courant. public override string ToString() { StringBuilder builder = new(); @@ -147,36 +205,69 @@ namespace Model return builder.ToString(); } + /// + /// Ajoute un avis sur le jeu. + /// + /// L'avis à ajouter. public void AddReview(Review review) { reviews.Add(review); UpdateReviews(); } + + /// + /// Supprime un avis du jeu. + /// + /// L'avis à supprimer. public void RemoveReview(Review review) { reviews.Remove(review); UpdateReviews(); } + + /// + /// Met à jour la liste des avis et la note moyenne. + /// public void UpdateReviews() { NotifyPropertyChanged(nameof(Reviews)); NotifyPropertyChanged(nameof(Average)); } + + /// + /// Modifie la description du jeu. + /// + /// La nouvelle description. public void DescChange(string newdesc) { description = newdesc; } + + /// + /// Modifie les étiquettes du jeu. + /// + /// La nouvelle liste d'étiquettes. public void TagChange(List newtag) { - if (newtag != null && newtag.Count<=3) tags = new List(newtag); + if (newtag != null && newtag.Count <= 3) tags = new List(newtag); } + + /// + /// Modifie le nom du jeu. + /// + /// Le nouveau nom. public void NameChange(string newname) { name = newname; } + + /// + /// Modifie l'année de sortie du jeu. + /// + /// La nouvelle année. public void YearChange(int newyear) { year = newyear; } } -} +} \ No newline at end of file diff --git a/Sources/Stim.Model/IPersistance.cs b/Sources/Stim.Model/IPersistance.cs index fbbdb03..93dc673 100644 --- a/Sources/Stim.Model/IPersistance.cs +++ b/Sources/Stim.Model/IPersistance.cs @@ -1,13 +1,32 @@ -using System.Collections.ObjectModel; - -namespace Model +namespace Model { + /// + /// Interface pour la persistance des données. + /// public interface IPersistance { + /// + /// Sauvegarde la liste des jeux. + /// + /// La liste des jeux à sauvegarder. public void SaveGame(List games); + + /// + /// Sauvegarde la liste des utilisateurs. + /// + /// La liste des utilisateurs à sauvegarder. public void SaveUser(HashSet users); + + /// + /// Charge la liste des jeux. + /// + /// La liste des jeux chargée. public List LoadGame(); - public HashSet LoadUser(); + /// + /// Charge la liste des utilisateurs. + /// + /// La liste des utilisateurs chargée. + public HashSet LoadUser(); } -} +} \ No newline at end of file diff --git a/Sources/Stim.Model/Manager.cs b/Sources/Stim.Model/Manager.cs index 2ea1e89..978ce2b 100644 --- a/Sources/Stim.Model/Manager.cs +++ b/Sources/Stim.Model/Manager.cs @@ -1,18 +1,43 @@ using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; -using System.Linq; namespace Model { + /// + /// Classe responsable de la gestion des jeux et des utilisateurs. + /// public class Manager { + /// + /// Le type de persistance utilisé par le gestionnaire. + /// public readonly IPersistance mgrpersistance; + + /// + /// La liste des jeux disponibles. + /// public ReadOnlyCollection GameList => gameList.AsReadOnly(); private readonly List gameList; + + /// + /// Le jeu sélectionné actuellement. + /// public Game? SelectedGame { get; set; } + + /// + /// L'utilisateur actuellement connecté. + /// public User? CurrentUser { get; set; } + + /// + /// La liste des utilisateurs enregistrés. + /// public HashSet Users { get; private set; } + /// + /// Initialise une nouvelle instance de la classe avec un objet de persistance spécifié. + /// + /// Le type de persistance utilisé pour charger/sauvegarder les jeux et les utilisateurs. public Manager(IPersistance persistance) { mgrpersistance = persistance; @@ -20,6 +45,13 @@ namespace Model Users = persistance.LoadUser(); } + /// + /// Filtre les jeux en fonction des critères de filtrage donnés. + /// + /// Nom du jeu à filtrer. + /// Première étiquette à filtrer. + /// Deuxième étiquette à filtrer. + /// Une liste de jeux filtrée. public IEnumerable FilterGames(string? filterName, string? filterTag1, string? filterTag2) { IEnumerable retList; @@ -36,28 +68,51 @@ namespace Model return retList; } + /// + /// Ajoute un jeu à la liste des jeux. + /// + /// Le jeu à ajouter. public void AddGametoGamesList(Game game) { if (!gameList.Contains(game)) gameList.Add(game); mgrpersistance.SaveGame(gameList); } + + /// + /// Ajoute un utilisateur à la liste des utilisateurs. + /// + /// L'utilisateur à ajouter. public void AddUsertoUserList(User user) { if (!Users.Contains(user)) Users.Add(user); mgrpersistance.SaveUser(Users); } + /// + /// Supprime un jeu de la liste des jeux. + /// + /// Le jeu à supprimer. public void RemoveGameFromGamesList(Game game) { SelectedGame = null; gameList.Remove(game); mgrpersistance.SaveGame(gameList); } + + /// + /// Sauvegarde les jeux. + /// [ExcludeFromCodeCoverage] public void SaveGames() { mgrpersistance.SaveGame(gameList); } + + /// + /// Recherche un utilisateur par son nom d'utilisateur. + /// + /// Le nom d'utilisateur à rechercher. + /// L'utilisateur correspondant, ou null s'il n'est pas trouvé. public User? SearchUser(string username) { foreach (User user in Users) @@ -66,12 +121,19 @@ namespace Model } return null; } + + /// + /// Sauvegarde les utilisateurs. + /// [ExcludeFromCodeCoverage] public void SaveUser() { mgrpersistance.SaveUser(Users); } + /// + /// Met à jour les références des jeux suivis par l'utilisateur actuel. + /// [ExcludeFromCodeCoverage] public void UpdateReferences() { diff --git a/Sources/Stim.Model/Review.cs b/Sources/Stim.Model/Review.cs index 894244b..c04f8ff 100644 --- a/Sources/Stim.Model/Review.cs +++ b/Sources/Stim.Model/Review.cs @@ -4,10 +4,16 @@ using System.Runtime.Serialization; namespace Model { + /// + /// Représente un commentaire. + /// [DataContract] - public class Review :INotifyPropertyChanged + public class Review : INotifyPropertyChanged { [DataMember] + /// + /// Obtient ou définit la note du commentaire. + /// public double Rate { get => rate; @@ -21,6 +27,9 @@ namespace Model private double rate; [DataMember] + /// + /// Obtient ou définit le texte du commentaire. + /// public string? Text { get => text; @@ -33,13 +42,26 @@ namespace Model } private string? text; + /// + /// Événement déclenché lorsque les propriétés de l'objet changent. + /// public event PropertyChangedEventHandler? PropertyChanged; + private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); [DataMember] + /// + /// Obtient ou définit le nom de l'auteur du commentaire. + /// public string AuthorName { get; set; } + /// + /// Initialise une nouvelle instance de la classe avec le nom de l'auteur, la note et le texte du commentaire. + /// + /// Le nom de l'auteur du commentaire. + /// La note du commentaire. + /// Le texte du commentaire. public Review(string username, double rate, string text) { AuthorName = username; @@ -47,18 +69,31 @@ namespace Model Text = text; } + /// + /// Retourne une représentation sous forme de chaîne de l'objet courant. + /// + /// La représentation sous forme de chaîne de l'objet courant. public override string ToString() { return $"{AuthorName} : {Rate} : {Text}"; } + /// + /// Modifie le texte du commentaire. + /// + /// Le nouveau texte du commentaire. public void EditReview(string text) { - if (!string.IsNullOrWhiteSpace(text)) Text = text+" (Modifié)"; + if (!string.IsNullOrWhiteSpace(text)) Text = text + " (Modifié)"; } + + /// + /// Modifie la note du commentaire. + /// + /// La nouvelle valeur de la note. public void EditRate(double newval) { - if (newval >= 0 && newval <= 5) Rate= newval; + if (newval >= 0 && newval <= 5) Rate = newval; } } -} +} \ No newline at end of file diff --git a/Sources/Stim.Model/User.cs b/Sources/Stim.Model/User.cs index b8c99e7..d1ee209 100644 --- a/Sources/Stim.Model/User.cs +++ b/Sources/Stim.Model/User.cs @@ -7,9 +7,15 @@ using System.Text.RegularExpressions; namespace Model { + /// + /// Représente un utilisateur. + /// [DataContract] - public sealed class User : INotifyPropertyChanged , IEquatable + public sealed class User : INotifyPropertyChanged, IEquatable { + /// + /// Obtient ou définit la photo de profil de l'utilisateur. + /// [DataMember] public string UserImage { @@ -22,6 +28,10 @@ namespace Model } } private string userImage = default!; + + /// + /// Obtient ou définit le nom d'utilisateur. + /// [DataMember] public string? Username { @@ -33,11 +43,15 @@ namespace Model NotifyPropertyChanged(); } } - private string username=default!; + private string username = default!; + + /// + /// Obtient ou définit la biographie de l'utilisateur. + /// [DataMember] - public string Biographie + public string Biographie { - get => biographie; + get => biographie; set { if (string.IsNullOrWhiteSpace(value)) biographie = "Pas de biographie"; @@ -46,6 +60,10 @@ namespace Model } } private string biographie = default!; + + /// + /// Obtient ou définit l'adresse e-mail de l'utilisateur. + /// [DataMember] public string Email { @@ -62,6 +80,10 @@ namespace Model } } private string email = default!; + + /// + /// Obtient ou définit le mot de passe de l'utilisateur. + /// [DataMember] public string Password { @@ -79,16 +101,30 @@ namespace Model } private string password = default!; + /// + /// Événement déclenché lorsqu'une propriété de l'utilisateur change. + /// public event PropertyChangedEventHandler? PropertyChanged; + /// + /// Obtient la liste des jeux suivis par l'utilisateur. + /// public ReadOnlyCollection Followed_Games => followed_Games.AsReadOnly(); [DataMember] private readonly List followed_Games; - public User(string userImage,string username, string biographie, string email, string password) + /// + /// Initialise une nouvelle instance de la classe . + /// + /// La photo de profil de l'utilisateur. + /// Le nom d'utilisateur. + /// La biographie de l'utilisateur. + /// L'adresse e-mail de l'utilisateur. + /// Le mot de passe de l'utilisateur. + public User(string userImage, string username, string biographie, string email, string password) { - if (userImage == null) UserImage="no_cover.png"; + if (userImage == null) UserImage = "no_cover.png"; else UserImage = userImage; if (username == null) Username = "Default"; else Username = username; @@ -100,15 +136,26 @@ namespace Model else Password = password; followed_Games = new List(); } + private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + /// + /// Détermine si l'objet spécifié est égal à l'objet courant. + /// + /// L'objet à comparer avec l'objet courant. + /// true si l'objet spécifié est égal à l'objet courant ; sinon, false. public bool Equals(User? other) { if (string.IsNullOrWhiteSpace(Username)) return false; return other != null && Username.Equals(other.Username); } + /// + /// Détermine si l'objet spécifié est égal à l'objet courant. + /// + /// L'objet à comparer avec l'objet courant. + /// true si l'objet spécifié est égal à l'objet courant ; sinon, false. public override bool Equals(object? obj) { if (obj == null) return false; @@ -117,16 +164,33 @@ namespace Model return this.Equals((User)obj); } + /// + /// Retourne le code de hachage de l'objet. + /// + /// Code de hachage. public override int GetHashCode() - { - if (Username!=null) return Username.GetHashCode(); + { + if (Username != null) return Username.GetHashCode(); return 0; } + /// + /// Ajoute une critique d'utilisateur pour un jeu spécifié. + /// + /// Le jeu pour lequel ajouter la critique. + /// La note de la critique. + /// Le texte de la critique. public void AddReview(Game game, double rate, string text) { game.AddReview(new Review(Username, rate, text)); } + + /// + /// Supprime la critique de l'utilisateur pour un jeu spécifié. + /// + /// Le jeu pour lequel supprimer la critique. + /// La note de la critique. + /// Le texte de la critique. public void RemoveSelfReview(Game game, float rate, string text) { for (int i = game.Reviews.Count - 1; i >= 0; i--) @@ -138,12 +202,22 @@ namespace Model } } } + + /// + /// Suit un jeu spécifié. + /// + /// Le jeu à suivre. public void FollowAGame(Game game) { if (Followed_Games.Contains(game)) return; followed_Games.Add(game); NotifyPropertyChanged(nameof(Followed_Games)); } + + /// + /// Ne suit plus un jeu spécifié. + /// + /// Le jeu à ne plus suivre. public void RemoveAGame(Game game) { if (!Followed_Games.Contains(game)) return; @@ -151,6 +225,10 @@ namespace Model NotifyPropertyChanged(nameof(Followed_Games)); } + /// + /// Retourne une représentation sous forme de chaîne de l'objet. + /// + /// La représentation sous forme de chaîne de l'objet. public override string ToString() { StringBuilder builder = new(); @@ -159,4 +237,4 @@ namespace Model return builder.ToString(); } } -} +} \ No newline at end of file diff --git a/Sources/Stim/LoginPage.xaml b/Sources/Stim/LoginPage.xaml index 6f5b96b..6bdbf1a 100644 --- a/Sources/Stim/LoginPage.xaml +++ b/Sources/Stim/LoginPage.xaml @@ -16,15 +16,13 @@ IsPassword="False" x:Name="Username" HeightRequest="50" - ClearButtonVisibility="WhileEditing" - Text="anthony"/> + ClearButtonVisibility="WhileEditing"/> + ClearButtonVisibility="WhileEditing"/>