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"/>