doxygen
continuous-integration/drone/push Build is passing Details

master
Anthony RICHARD 2 years ago
parent f6a58fd818
commit 7d4366326f

@ -55,8 +55,8 @@ steps:
- name: docs
path: /docs
commands:
#- cd Documentation/doxygen
#- doxygen Doxyfile
- cd Documentation/doxygen
- doxygen Doxyfile
- /entrypoint.sh
when:
branch:

@ -6,10 +6,16 @@ using System.Text;
namespace Model
{
/// <summary>
/// Représente un jeu.
/// </summary>
[DataContract]
public sealed class Game : INotifyPropertyChanged, IEquatable<Game>
{
[DataMember]
/// <summary>
/// Obtient ou définit le nom du jeu.
/// </summary>
public string Name
{
get => name;
@ -23,6 +29,9 @@ namespace Model
private string name = default!;
[DataMember]
/// <summary>
/// Obtient ou définit la description du jeu.
/// </summary>
public string Description
{
get => description;
@ -36,6 +45,9 @@ namespace Model
private string description = default!;
[DataMember]
/// <summary>
/// Obtient ou définit l'année de sortie du jeu.
/// </summary>
public int Year
{
get => year;
@ -49,6 +61,9 @@ namespace Model
private int year = default!;
[DataMember]
/// <summary>
/// Obtient ou définit la couverture du jeu.
/// </summary>
public string Cover
{
get => cover;
@ -60,7 +75,10 @@ namespace Model
}
}
private string cover = default!;
/// <summary>
/// Obtient les étiquettes du jeu.
/// </summary>
public ReadOnlyCollection<string> Tags
{
get => tags.AsReadOnly();
@ -74,15 +92,25 @@ namespace Model
[DataMember]
private List<string> tags;
/// <summary>
/// Obtient les avis sur le jeu.
/// </summary>
public ReadOnlyCollection<Review> Reviews => reviews.AsReadOnly();
[DataMember]
private readonly List<Review> reviews;
/// <summary>
/// Obtient la note moyenne du jeu.
/// </summary>
public double Average => Reviews.Any() ? Math.Round(Reviews.Select(review => review.Rate).Average(), 1) : 0;
[DataMember]
public string Lien {
/// <summary>
/// Obtient ou définit le lien du jeu.
/// </summary>
public string Lien
{
get => lien;
private set
{
@ -93,6 +121,15 @@ namespace Model
}
private string lien = default!;
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Game"/> avec les valeurs spécifiées.
/// </summary>
/// <param name="name">Le nom du jeu.</param>
/// <param name="description">La description du jeu.</param>
/// <param name="year">L'année de sortie du jeu.</param>
/// <param name="c_tags">Les étiquettes du jeu.</param>
/// <param name="cover">La couverture du jeu.</param>
/// <param name="c_lien">Le lien du jeu.</param>
public Game(string name, string description, int year, List<string> c_tags, string cover, string c_lien)
{
if (string.IsNullOrWhiteSpace(name)) Name = "Default";
@ -109,17 +146,29 @@ namespace Model
reviews = new List<Review>();
}
/// <summary>
/// Événement déclenché lorsque la valeur d'une propriété change.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
/// <summary>
/// Retourne le code de hachage pour l'objet.
/// </summary>
/// <returns>Le code de hachage calculé.</returns>
public override int GetHashCode()
{
if (string.IsNullOrWhiteSpace(Name)) return 0;
return Name.GetHashCode();
return Name.GetHashCode();
}
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet actuel.
/// </summary>
/// <param name="obj">L'objet à comparer avec l'objet actuel.</param>
/// <returns>True si les objets sont égaux, sinon False.</returns>
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);
}
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet actuel.
/// </summary>
/// <param name="other">L'objet à comparer avec l'objet actuel.</param>
/// <returns>True si les objets sont égaux, sinon False.</returns>
public bool Equals(Game? other)
{
if (string.IsNullOrWhiteSpace(Name)) return false;
return other != null && Name.Equals(other.Name);
}
/// <summary>
/// Retourne une chaîne qui représente l'objet courant.
/// </summary>
/// <returns>Une chaîne qui représente l'objet courant.</returns>
public override string ToString()
{
StringBuilder builder = new();
@ -147,36 +205,69 @@ namespace Model
return builder.ToString();
}
/// <summary>
/// Ajoute un avis sur le jeu.
/// </summary>
/// <param name="review">L'avis à ajouter.</param>
public void AddReview(Review review)
{
reviews.Add(review);
UpdateReviews();
}
/// <summary>
/// Supprime un avis du jeu.
/// </summary>
/// <param name="review">L'avis à supprimer.</param>
public void RemoveReview(Review review)
{
reviews.Remove(review);
UpdateReviews();
}
/// <summary>
/// Met à jour la liste des avis et la note moyenne.
/// </summary>
public void UpdateReviews()
{
NotifyPropertyChanged(nameof(Reviews));
NotifyPropertyChanged(nameof(Average));
}
/// <summary>
/// Modifie la description du jeu.
/// </summary>
/// <param name="newdesc">La nouvelle description.</param>
public void DescChange(string newdesc)
{
description = newdesc;
}
/// <summary>
/// Modifie les étiquettes du jeu.
/// </summary>
/// <param name="newtag">La nouvelle liste d'étiquettes.</param>
public void TagChange(List<string> newtag)
{
if (newtag != null && newtag.Count<=3) tags = new List<string>(newtag);
if (newtag != null && newtag.Count <= 3) tags = new List<string>(newtag);
}
/// <summary>
/// Modifie le nom du jeu.
/// </summary>
/// <param name="newname">Le nouveau nom.</param>
public void NameChange(string newname)
{
name = newname;
}
/// <summary>
/// Modifie l'année de sortie du jeu.
/// </summary>
/// <param name="newyear">La nouvelle année.</param>
public void YearChange(int newyear)
{
year = newyear;
}
}
}
}

@ -1,13 +1,32 @@
using System.Collections.ObjectModel;
namespace Model
namespace Model
{
/// <summary>
/// Interface pour la persistance des données.
/// </summary>
public interface IPersistance
{
/// <summary>
/// Sauvegarde la liste des jeux.
/// </summary>
/// <param name="games">La liste des jeux à sauvegarder.</param>
public void SaveGame(List<Game> games);
/// <summary>
/// Sauvegarde la liste des utilisateurs.
/// </summary>
/// <param name="users">La liste des utilisateurs à sauvegarder.</param>
public void SaveUser(HashSet<User> users);
/// <summary>
/// Charge la liste des jeux.
/// </summary>
/// <returns>La liste des jeux chargée.</returns>
public List<Game> LoadGame();
public HashSet<User> LoadUser();
/// <summary>
/// Charge la liste des utilisateurs.
/// </summary>
/// <returns>La liste des utilisateurs chargée.</returns>
public HashSet<User> LoadUser();
}
}
}

@ -1,18 +1,43 @@
using System.Collections.ObjectModel;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace Model
{
/// <summary>
/// Classe responsable de la gestion des jeux et des utilisateurs.
/// </summary>
public class Manager
{
/// <summary>
/// Le type de persistance utilisé par le gestionnaire.
/// </summary>
public readonly IPersistance mgrpersistance;
/// <summary>
/// La liste des jeux disponibles.
/// </summary>
public ReadOnlyCollection<Game> GameList => gameList.AsReadOnly();
private readonly List<Game> gameList;
/// <summary>
/// Le jeu sélectionné actuellement.
/// </summary>
public Game? SelectedGame { get; set; }
/// <summary>
/// L'utilisateur actuellement connecté.
/// </summary>
public User? CurrentUser { get; set; }
/// <summary>
/// La liste des utilisateurs enregistrés.
/// </summary>
public HashSet<User> Users { get; private set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Manager"/> avec un objet de persistance spécifié.
/// </summary>
/// <param name="persistance">Le type de persistance utilisé pour charger/sauvegarder les jeux et les utilisateurs.</param>
public Manager(IPersistance persistance)
{
mgrpersistance = persistance;
@ -20,6 +45,13 @@ namespace Model
Users = persistance.LoadUser();
}
/// <summary>
/// Filtre les jeux en fonction des critères de filtrage donnés.
/// </summary>
/// <param name="filterName">Nom du jeu à filtrer.</param>
/// <param name="filterTag1">Première étiquette à filtrer.</param>
/// <param name="filterTag2">Deuxième étiquette à filtrer.</param>
/// <returns>Une liste de jeux filtrée.</returns>
public IEnumerable<Game> FilterGames(string? filterName, string? filterTag1, string? filterTag2)
{
IEnumerable<Game> retList;
@ -36,28 +68,51 @@ namespace Model
return retList;
}
/// <summary>
/// Ajoute un jeu à la liste des jeux.
/// </summary>
/// <param name="game">Le jeu à ajouter.</param>
public void AddGametoGamesList(Game game)
{
if (!gameList.Contains(game)) gameList.Add(game);
mgrpersistance.SaveGame(gameList);
}
/// <summary>
/// Ajoute un utilisateur à la liste des utilisateurs.
/// </summary>
/// <param name="user">L'utilisateur à ajouter.</param>
public void AddUsertoUserList(User user)
{
if (!Users.Contains(user)) Users.Add(user);
mgrpersistance.SaveUser(Users);
}
/// <summary>
/// Supprime un jeu de la liste des jeux.
/// </summary>
/// <param name="game">Le jeu à supprimer.</param>
public void RemoveGameFromGamesList(Game game)
{
SelectedGame = null;
gameList.Remove(game);
mgrpersistance.SaveGame(gameList);
}
/// <summary>
/// Sauvegarde les jeux.
/// </summary>
[ExcludeFromCodeCoverage]
public void SaveGames()
{
mgrpersistance.SaveGame(gameList);
}
/// <summary>
/// Recherche un utilisateur par son nom d'utilisateur.
/// </summary>
/// <param name="username">Le nom d'utilisateur à rechercher.</param>
/// <returns>L'utilisateur correspondant, ou null s'il n'est pas trouvé.</returns>
public User? SearchUser(string username)
{
foreach (User user in Users)
@ -66,12 +121,19 @@ namespace Model
}
return null;
}
/// <summary>
/// Sauvegarde les utilisateurs.
/// </summary>
[ExcludeFromCodeCoverage]
public void SaveUser()
{
mgrpersistance.SaveUser(Users);
}
/// <summary>
/// Met à jour les références des jeux suivis par l'utilisateur actuel.
/// </summary>
[ExcludeFromCodeCoverage]
public void UpdateReferences()
{

@ -4,10 +4,16 @@ using System.Runtime.Serialization;
namespace Model
{
/// <summary>
/// Représente un commentaire.
/// </summary>
[DataContract]
public class Review :INotifyPropertyChanged
public class Review : INotifyPropertyChanged
{
[DataMember]
/// <summary>
/// Obtient ou définit la note du commentaire.
/// </summary>
public double Rate
{
get => rate;
@ -21,6 +27,9 @@ namespace Model
private double rate;
[DataMember]
/// <summary>
/// Obtient ou définit le texte du commentaire.
/// </summary>
public string? Text
{
get => text;
@ -33,13 +42,26 @@ namespace Model
}
private string? text;
/// <summary>
/// Événement déclenché lorsque les propriétés de l'objet changent.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
[DataMember]
/// <summary>
/// Obtient ou définit le nom de l'auteur du commentaire.
/// </summary>
public string AuthorName { get; set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Review"/> avec le nom de l'auteur, la note et le texte du commentaire.
/// </summary>
/// <param name="username">Le nom de l'auteur du commentaire.</param>
/// <param name="rate">La note du commentaire.</param>
/// <param name="text">Le texte du commentaire.</param>
public Review(string username, double rate, string text)
{
AuthorName = username;
@ -47,18 +69,31 @@ namespace Model
Text = text;
}
/// <summary>
/// Retourne une représentation sous forme de chaîne de l'objet courant.
/// </summary>
/// <returns>La représentation sous forme de chaîne de l'objet courant.</returns>
public override string ToString()
{
return $"{AuthorName} : {Rate} : {Text}";
}
/// <summary>
/// Modifie le texte du commentaire.
/// </summary>
/// <param name="text">Le nouveau texte du commentaire.</param>
public void EditReview(string text)
{
if (!string.IsNullOrWhiteSpace(text)) Text = text+" (Modifié)";
if (!string.IsNullOrWhiteSpace(text)) Text = text + " (Modifié)";
}
/// <summary>
/// Modifie la note du commentaire.
/// </summary>
/// <param name="newval">La nouvelle valeur de la note.</param>
public void EditRate(double newval)
{
if (newval >= 0 && newval <= 5) Rate= newval;
if (newval >= 0 && newval <= 5) Rate = newval;
}
}
}
}

@ -7,9 +7,15 @@ using System.Text.RegularExpressions;
namespace Model
{
/// <summary>
/// Représente un utilisateur.
/// </summary>
[DataContract]
public sealed class User : INotifyPropertyChanged , IEquatable<User>
public sealed class User : INotifyPropertyChanged, IEquatable<User>
{
/// <summary>
/// Obtient ou définit la photo de profil de l'utilisateur.
/// </summary>
[DataMember]
public string UserImage
{
@ -22,6 +28,10 @@ namespace Model
}
}
private string userImage = default!;
/// <summary>
/// Obtient ou définit le nom d'utilisateur.
/// </summary>
[DataMember]
public string? Username
{
@ -33,11 +43,15 @@ namespace Model
NotifyPropertyChanged();
}
}
private string username=default!;
private string username = default!;
/// <summary>
/// Obtient ou définit la biographie de l'utilisateur.
/// </summary>
[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!;
/// <summary>
/// Obtient ou définit l'adresse e-mail de l'utilisateur.
/// </summary>
[DataMember]
public string Email
{
@ -62,6 +80,10 @@ namespace Model
}
}
private string email = default!;
/// <summary>
/// Obtient ou définit le mot de passe de l'utilisateur.
/// </summary>
[DataMember]
public string Password
{
@ -79,16 +101,30 @@ namespace Model
}
private string password = default!;
/// <summary>
/// Événement déclenché lorsqu'une propriété de l'utilisateur change.
/// </summary>
public event PropertyChangedEventHandler? PropertyChanged;
/// <summary>
/// Obtient la liste des jeux suivis par l'utilisateur.
/// </summary>
public ReadOnlyCollection<Game> Followed_Games => followed_Games.AsReadOnly();
[DataMember]
private readonly List<Game> followed_Games;
public User(string userImage,string username, string biographie, string email, string password)
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="User"/>.
/// </summary>
/// <param name="userImage">La photo de profil de l'utilisateur.</param>
/// <param name="username">Le nom d'utilisateur.</param>
/// <param name="biographie">La biographie de l'utilisateur.</param>
/// <param name="email">L'adresse e-mail de l'utilisateur.</param>
/// <param name="password">Le mot de passe de l'utilisateur.</param>
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<Game>();
}
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet courant.
/// </summary>
/// <param name="other">L'objet à comparer avec l'objet courant.</param>
/// <returns>true si l'objet spécifié est égal à l'objet courant ; sinon, false.</returns>
public bool Equals(User? other)
{
if (string.IsNullOrWhiteSpace(Username)) return false;
return other != null && Username.Equals(other.Username);
}
/// <summary>
/// Détermine si l'objet spécifié est égal à l'objet courant.
/// </summary>
/// <param name="obj">L'objet à comparer avec l'objet courant.</param>
/// <returns>true si l'objet spécifié est égal à l'objet courant ; sinon, false.</returns>
public override bool Equals(object? obj)
{
if (obj == null) return false;
@ -117,16 +164,33 @@ namespace Model
return this.Equals((User)obj);
}
/// <summary>
/// Retourne le code de hachage de l'objet.
/// </summary>
/// <returns>Code de hachage.</returns>
public override int GetHashCode()
{
if (Username!=null) return Username.GetHashCode();
{
if (Username != null) return Username.GetHashCode();
return 0;
}
/// <summary>
/// Ajoute une critique d'utilisateur pour un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu pour lequel ajouter la critique.</param>
/// <param name="rate">La note de la critique.</param>
/// <param name="text">Le texte de la critique.</param>
public void AddReview(Game game, double rate, string text)
{
game.AddReview(new Review(Username, rate, text));
}
/// <summary>
/// Supprime la critique de l'utilisateur pour un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu pour lequel supprimer la critique.</param>
/// <param name="rate">La note de la critique.</param>
/// <param name="text">Le texte de la critique.</param>
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
}
}
}
/// <summary>
/// Suit un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu à suivre.</param>
public void FollowAGame(Game game)
{
if (Followed_Games.Contains(game)) return;
followed_Games.Add(game);
NotifyPropertyChanged(nameof(Followed_Games));
}
/// <summary>
/// Ne suit plus un jeu spécifié.
/// </summary>
/// <param name="game">Le jeu à ne plus suivre.</param>
public void RemoveAGame(Game game)
{
if (!Followed_Games.Contains(game)) return;
@ -151,6 +225,10 @@ namespace Model
NotifyPropertyChanged(nameof(Followed_Games));
}
/// <summary>
/// Retourne une représentation sous forme de chaîne de l'objet.
/// </summary>
/// <returns>La représentation sous forme de chaîne de l'objet.</returns>
public override string ToString()
{
StringBuilder builder = new();
@ -159,4 +237,4 @@ namespace Model
return builder.ToString();
}
}
}
}

@ -16,15 +16,13 @@
IsPassword="False"
x:Name="Username"
HeightRequest="50"
ClearButtonVisibility="WhileEditing"
Text="anthony"/>
ClearButtonVisibility="WhileEditing"/>
<Entry Placeholder="Mot de passe"
PlaceholderColor="{StaticResource Primary}"
IsPassword="True" x:Name="Pswd"
HeightRequest="50"
Grid.Row="1"
ClearButtonVisibility="WhileEditing"
Text="anthony5"/>
ClearButtonVisibility="WhileEditing"/>
<Grid Grid.Row="2"
Margin="10,0,0,10" ColumnDefinitions="3*, *">

Loading…
Cancel
Save