Compare commits

...

4 Commits

@ -1,9 +1,19 @@
namespace WF_WebAdmin.Converter
{
/// <summary>
/// Représente un objet de transfert de données (DTO) pour une citation quotidienne.
/// </summary>
public class DailyQuoteDTO
{
/// <summary>
/// Identifiant unique de la citation quotidienne.
/// </summary>
private int Id { get; set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="DailyQuoteDTO"/> avec un identifiant.
/// </summary>
/// <param name="id">L'identifiant unique de la citation quotidienne.</param>
public DailyQuoteDTO(int id)
{
this.Id = id;

@ -2,10 +2,19 @@
namespace WF_WebAdmin.Converter
{
/// <summary>
/// Fournit des extensions pour convertir des objets de type <see cref="DailyQuote"/> en objets de type <see cref="DailyQuoteDTO"/>.
/// </summary>
public class DailyQuoteExtension
{
/// <summary>
/// Convertit une instance de <see cref="DailyQuote"/> en une instance de <see cref="DailyQuoteDTO"/>.
/// </summary>
/// <param name="dq">L'objet <see cref="DailyQuote"/> à convertir.</param>
/// <returns>Une instance de <see cref="DailyQuoteDTO"/> contenant l'identifiant de la citation quotidienne.</returns>
public DailyQuoteDTO DailyQuoteToDTO(DailyQuote dq)
{
// Création de l'objet DTO à partir de l'objet DailyQuote
DailyQuoteDTO dailyQuote = new DailyQuoteDTO(dq.Id);
return dailyQuote;
}

@ -3,25 +3,105 @@ using System;
namespace WF_WebAdmin.Converter
{
/// <summary>
/// Représente un objet Data Transfer Object (DTO) pour une citation.
/// </summary>
public class QuoteDTO
{
/// <summary>
/// Identifiant de la citation.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Contenu de la citation.
/// </summary>
public string Content { get; set; }
/// <summary>
/// Nombre de "likes" de la citation.
/// </summary>
public int Likes { get; set; }
/// <summary>
/// Langue de la citation.
/// </summary>
public string Langue { get; set; }
/// <summary>
/// Indique si la citation est valide.
/// </summary>
public bool IsValide { get; set; }
/// <summary>
/// Raison pour laquelle la citation pourrait être invalide.
/// </summary>
public string? Reason { get; set; }
/// <summary>
/// Identifiant du caractère associé à la citation (si applicable).
/// </summary>
public int? IdCaracter { get; set; }
/// <summary>
/// Nom du caractère associé à la citation (si applicable).
/// </summary>
public string NameCharac { get; set; }
/// <summary>
/// Identifiant de la source de la citation.
/// </summary>
public int? IdSource { get; set; }
/// <summary>
/// Titre de la source de la citation.
/// </summary>
public string TitleSrc { get; set; }
/// <summary>
/// Date de la source de la citation.
/// </summary>
public DateTime DateSrc { get; set; }
/// <summary>
/// Identifiant de l'utilisateur qui a vérifié la citation (si applicable).
/// </summary>
public int? IdUserVerif { get; set; }
/// <summary>
/// Nom de l'utilisateur qui a vérifié la citation.
/// </summary>
public string NameUser { get; set; }
/// <summary>
/// Identifiant de l'image associée à la citation (si applicable).
/// </summary>
public int? IdImg { get; set; }
/// <summary>
/// Chemin de l'image associée à la citation.
/// </summary>
public string ImgPath { get; set; }
public QuoteDTO(int id_quote,string content,int likes,string langue,bool isValide,string? reason,int? id_caracter,string name_charac,int? id_source,string title,DateTime date,int? id_user_verif,string name_user ,int? id_img,string img_path)
/// <summary>
/// Initialise une nouvelle instance de <see cref="QuoteDTO"/>.
/// </summary>
/// <param name="id_quote">L'identifiant de la citation.</param>
/// <param name="content">Le contenu de la citation.</param>
/// <param name="likes">Le nombre de likes de la citation.</param>
/// <param name="langue">La langue de la citation.</param>
/// <param name="isValide">Indique si la citation est valide.</param>
/// <param name="reason">La raison pour laquelle la citation peut être invalide.</param>
/// <param name="id_caracter">L'identifiant du caractère associé à la citation.</param>
/// <param name="name_charac">Le nom du caractère associé à la citation.</param>
/// <param name="id_source">L'identifiant de la source de la citation.</param>
/// <param name="title">Le titre de la source de la citation.</param>
/// <param name="date">La date de la source de la citation.</param>
/// <param name="id_user_verif">L'identifiant de l'utilisateur ayant vérifié la citation.</param>
/// <param name="name_user">Le nom de l'utilisateur ayant vérifié la citation.</param>
/// <param name="id_img">L'identifiant de l'image associée à la citation.</param>
/// <param name="img_path">Le chemin de l'image associée à la citation.</param>
public QuoteDTO(int id_quote, string content, int likes, string langue, bool isValide, string? reason, int? id_caracter, string name_charac, int? id_source, string title, DateTime date, int? id_user_verif, string name_user, int? id_img, string img_path)
{
this.Id = id_quote;
this.Content = content;
@ -37,7 +117,7 @@ namespace WF_WebAdmin.Converter
this.IdUserVerif = id_user_verif;
this.NameUser = name_user;
this.IdImg = id_img;
this.ImgPath =img_path;
this.ImgPath = img_path;
}
}
}

@ -2,17 +2,59 @@
namespace WF_WebAdmin.Converter
{
/// <summary>
/// Classe d'extension pour la conversion entre les objets <see cref="Quote"/> et <see cref="QuoteDTO"/>.
/// </summary>
public class QuoteExtension
{
/// <summary>
/// Convertit un objet <see cref="Quote"/> en un objet <see cref="QuoteDTO"/>.
/// </summary>
/// <param name="q">L'objet <see cref="Quote"/> à convertir.</param>
/// <returns>Un objet <see cref="QuoteDTO"/> contenant les données de l'objet <see cref="Quote"/>.</returns>
public QuoteDTO QuoteToDTO(Quote q)
{
QuoteDTO quote = new QuoteDTO(q.Id, q.Content, q.Like, q.Langue, q.IsValid,null, null,q.Charac,null,q.TitleSrc,q.DateSrc,null,q.UserProposition,null,q.ImgPath);
// Conversion des propriétés de Quote en QuoteDTO
QuoteDTO quote = new QuoteDTO(
q.Id,
q.Content,
q.Like,
q.Langue,
q.IsValid,
null, // Reason non défini ici
null, // IdCaracter non défini ici
q.Charac,
null, // IdSource non défini ici
q.TitleSrc,
q.DateSrc,
null, // IdUserVerif non défini ici
q.UserProposition,
null, // IdImg non défini ici
q.ImgPath
);
return quote;
}
/// <summary>
/// Convertit un objet <see cref="QuoteDTO"/> en un objet <see cref="Quote"/>.
/// </summary>
/// <param name="q">L'objet <see cref="QuoteDTO"/> à convertir.</param>
/// <returns>Un objet <see cref="Quote"/> contenant les données de l'objet <see cref="QuoteDTO"/>.</returns>
public Quote DTOToQuote(QuoteDTO q)
{
Quote quote = new Quote(q.Id, q.Content,q.NameCharac,q.ImgPath,q.TitleSrc,q.DateSrc,q.Likes,q.Langue,q.NameUser,q.IsValide);
// Conversion des propriétés de QuoteDTO en Quote
Quote quote = new Quote(
q.Id,
q.Content,
q.NameCharac,
q.ImgPath,
q.TitleSrc,
q.DateSrc,
q.Likes,
q.Langue,
q.NameUser,
q.IsValide
);
return quote;
}
}

@ -2,19 +2,51 @@
namespace WF_WebAdmin.Converter
{
/// <summary>
/// Représente un objet Data Transfer Object (DTO) pour un utilisateur.
/// Utilisé pour transmettre les informations d'un utilisateur entre différentes couches de l'application.
/// </summary>
public class UserDTO
{
/// <summary>
/// Obtient ou définit l'image de l'utilisateur.
/// </summary>
public string Image { get; set; }
/// <summary>
/// Obtient ou définit le nom de l'utilisateur.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Obtient ou définit l'adresse email de l'utilisateur.
/// </summary>
public string Email { get; set; }
/// <summary>
/// Obtient ou définit la date de création de l'utilisateur.
/// </summary>
public DateTime DateCreation { get; set; }
/// <summary>
/// Obtient ou définit une valeur indiquant si l'utilisateur est un administrateur.
/// </summary>
public Boolean IsAdmin { get; set; }
/// <summary>
/// Obtient ou définit la liste des commentaires associés à l'utilisateur.
/// </summary>
public List<Commentary> Comments { get; set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="UserDTO"/> avec les informations de base d'un utilisateur.
/// </summary>
/// <param name="image">L'image de l'utilisateur.</param>
/// <param name="name">Le nom de l'utilisateur.</param>
/// <param name="email">L'email de l'utilisateur.</param>
/// <param name="dateCreation">La date de création du compte utilisateur.</param>
public UserDTO(string image, string name, string email, DateTime dateCreation)
{
this.Image = image;
this.Name = name;
this.Email = email;

@ -2,16 +2,31 @@
namespace WF_WebAdmin.Converter
{
/// <summary>
/// Classe d'extension permettant la conversion entre un utilisateur et son Data Transfer Object (DTO).
/// </summary>
public class UserExtension
{
/// <summary>
/// Convertit un objet <see cref="UserDTO"/> en un objet <see cref="User"/>.
/// </summary>
/// <param name="u">L'objet <see cref="UserDTO"/> à convertir.</param>
/// <returns>Retourne un nouvel objet <see cref="User"/> avec les données du DTO.</returns>
public User UserToDTO(UserDTO u)
{
User user = new User(u.Image, u.Name, u.Email, u.DateCreation,u.IsAdmin);
// Création d'un objet User à partir des données du DTO
User user = new User(u.Image, u.Name, u.Email, u.DateCreation, u.IsAdmin);
return user;
}
/// <summary>
/// Convertit un objet <see cref="User"/> en un objet <see cref="UserDTO"/>.
/// </summary>
/// <param name="u">L'objet <see cref="User"/> à convertir.</param>
/// <returns>Retourne un nouvel objet <see cref="UserDTO"/> avec les données de l'utilisateur.</returns>
public UserDTO DTOToUser(User u)
{
// Création d'un objet UserDTO à partir des données de l'utilisateur
UserDTO user = new UserDTO(u.Image, u.Name, u.Email, u.DateCreation);
return user;
}

@ -1,13 +0,0 @@
namespace WF_WebAdmin.Data
{
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string? Summary { get; set; }
}
}

@ -1,20 +0,0 @@
namespace WF_WebAdmin.Data
{
public class WeatherForecastService
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public Task<WeatherForecast[]> GetForecastAsync(DateTime startDate)
{
return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = startDate.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
}).ToArray());
}
}
}

@ -1,8 +1,18 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente un personnage dans le système.
/// </summary>
public class Character
{
/// <summary>
/// Identifiant unique du personnage.
/// </summary>
public int id_caracter { get; set; }
/// <summary>
/// Nom ou description du personnage.
/// </summary>
public string caracter { get; set; }
}
}

@ -1,10 +1,21 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente un commentaire dans le système.
/// </summary>
public class Commentary
{
//public int Id { get; set; }
//public int IdUser { get; set; }
/// <summary>
/// Le texte du commentaire.
/// </summary>
public string Text { get; set; }
/// <summary>
/// La date de création du commentaire.
/// </summary>
public DateTime DateCreation { get; set; }
}
}

@ -1,9 +1,19 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente une citation quotidienne dans le système.
/// </summary>
public class DailyQuote
{
/// <summary>
/// Identifiant unique de la citation quotidienne.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="DailyQuote"/>.
/// </summary>
/// <param name="Id">L'identifiant de la citation quotidienne.</param>
public DailyQuote(int Id)
{
this.Id = Id;

@ -1,17 +1,67 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente un quiz avec une question et plusieurs réponses possibles.
/// </summary>
public class Quiz
{
/// <summary>
/// Identifiant unique du quiz.
/// </summary>
public int Id { get; set; }
/// <summary>
/// La question posée dans le quiz.
/// </summary>
public string Question { get; set; }
/// <summary>
/// Réponse A possible pour le quiz.
/// </summary>
public string AnswerA { get; set; }
/// <summary>
/// Réponse B possible pour le quiz.
/// </summary>
public string AnswerB { get; set; }
/// <summary>
/// Réponse C possible pour le quiz.
/// </summary>
public string AnswerC { get; set; }
/// <summary>
/// Réponse D possible pour le quiz.
/// </summary>
public string AnswerD { get; set; }
/// <summary>
/// Réponse correcte au quiz (A, B, C ou D).
/// </summary>
public string CAnswer { get; set; }
/// <summary>
/// Indique si le quiz est valide.
/// </summary>
public bool IsValid { get; set; }
/// <summary>
/// Proposition de l'utilisateur pour valider le quiz.
/// </summary>
public string UserProposition { get; set; }
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Quiz"/>.
/// </summary>
/// <param name="id">L'identifiant du quiz.</param>
/// <param name="question">La question posée dans le quiz.</param>
/// <param name="answerA">Réponse A possible.</param>
/// <param name="answerB">Réponse B possible.</param>
/// <param name="answerC">Réponse C possible.</param>
/// <param name="answerD">Réponse D possible.</param>
/// <param name="cAnswer">Réponse correcte (A, B, C ou D).</param>
/// <param name="isValid">Indique si le quiz est valide.</param>
/// <param name="userProposition">Proposition de l'utilisateur.</param>
public Quiz(int id, string question, string answerA, string answerB, string answerC, string answerD, string cAnswer, bool isValid, string userProposition)
{
Id = id;
@ -25,6 +75,16 @@ namespace WF_WebAdmin.Model
UserProposition = userProposition;
}
/// <summary>
/// Initialise une nouvelle instance de la classe <see cref="Quiz"/> avec une valeur par défaut pour la validité et la proposition de l'utilisateur.
/// </summary>
/// <param name="id">L'identifiant du quiz.</param>
/// <param name="question">La question posée dans le quiz.</param>
/// <param name="answerA">Réponse A possible.</param>
/// <param name="answerB">Réponse B possible.</param>
/// <param name="answerC">Réponse C possible.</param>
/// <param name="answerD">Réponse D possible.</param>
/// <param name="cAnswer">Réponse correcte (A, B, C ou D).</param>
public Quiz(int id, string question, string answerA, string answerB, string answerC, string answerD, string cAnswer)
{
Id = id;
@ -38,7 +98,9 @@ namespace WF_WebAdmin.Model
UserProposition = "Admin";
}
/// <summary>
/// Constructeur par défaut pour la classe <see cref="Quiz"/>.
/// </summary>
public Quiz() {}
}
}

@ -2,28 +2,55 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Modèle représentant les données nécessaires à la création ou à la modification d'un quiz.
/// </summary>
public class QuizModel
{
/// <summary>
/// Question posée dans le quiz.
/// Cette propriété est obligatoire et doit être d'une longueur maximale de 200 caractères.
/// </summary>
[Required]
[StringLength(200, ErrorMessage = "La question ne peut pas depasser les 200 caractère.")]
public string Question { get; set; }
/// <summary>
/// Première réponse possible pour le quiz.
/// Cette propriété est obligatoire et doit être d'une longueur maximale de 50 caractères.
/// </summary>
[Required]
[StringLength(50, ErrorMessage = "La réponse ne peut pas depasser les 50 caractère.")]
public string AnswerA { get; set; }
/// <summary>
/// Deuxième réponse possible pour le quiz.
/// Cette propriété est obligatoire et doit être d'une longueur maximale de 50 caractères.
/// </summary>
[Required]
[StringLength(50, ErrorMessage = "La réponse ne peut pas depasser les 50 caractère.")]
public string AnswerB { get; set; }
/// <summary>
/// Troisième réponse possible pour le quiz.
/// Cette propriété est obligatoire et doit être d'une longueur maximale de 50 caractères.
/// </summary>
[Required]
[StringLength(50, ErrorMessage = "La réponse ne peut pas depasser les 50 caractère.")]
public string AnswerC { get; set; }
/// <summary>
/// Quatrième réponse possible pour le quiz.
/// Cette propriété est obligatoire et doit être d'une longueur maximale de 50 caractères.
/// </summary>
[Required]
[StringLength(50, ErrorMessage = "La réponse ne peut pas depasser les 50 caractère.")]
public string AnswerD { get; set; }
/// <summary>
/// Réponse correcte au quiz, choisie parmi A, B, C ou D.
/// Cette propriété est obligatoire.
/// </summary>
[Required]
public string CAnswer { get; set; }
}

@ -1,20 +1,73 @@
using Microsoft.AspNetCore.DataProtection.KeyManagement;
namespace WF_WebAdmin.Model
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente une citation dans le système.
/// </summary>
public class Quote
{
/// <summary>
/// Identifiant unique de la citation.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Contenu de la citation.
/// </summary>
public string Content { get; set; }
/// <summary>
/// Nombre de "likes" reçus pour cette citation.
/// </summary>
public int Like { get; set; }
/// <summary>
/// Langue dans laquelle la citation est écrite.
/// </summary>
public string Langue { get; set; }
/// <summary>
/// Caractère associé à la citation (ex : personnage, auteur, etc.).
/// </summary>
public string Charac { get; set; }
/// <summary>
/// Chemin d'accès à l'image associée à la citation.
/// </summary>
public string ImgPath { get; set; }
/// <summary>
/// Titre de la source de la citation (ex : livre, film, etc.).
/// </summary>
public string TitleSrc { get; set; }
/// <summary>
/// Date de la source de la citation.
/// </summary>
public DateTime DateSrc { get; set; }
/// <summary>
/// Nom de l'utilisateur ayant proposé la citation.
/// </summary>
public string UserProposition { get; set; }
/// <summary>
/// Indique si la citation est valide.
/// </summary>
public bool IsValid { get; set; }
/// <summary>
/// Constructeur pour créer une nouvelle citation avec tous ses attributs.
/// </summary>
/// <param name="id">Identifiant de la citation.</param>
/// <param name="content">Contenu de la citation.</param>
/// <param name="charac">Caractère associé à la citation.</param>
/// <param name="imgPath">Chemin de l'image associée.</param>
/// <param name="titleSrc">Titre de la source.</param>
/// <param name="dateSrc">Date de la source.</param>
/// <param name="like">Nombre de "likes" reçus.</param>
/// <param name="langue">Langue de la citation.</param>
/// <param name="userProposition">Nom de l'utilisateur ayant proposé la citation.</param>
/// <param name="isvalid">Indicateur de validité de la citation.</param>
public Quote(int id, string content, string charac, string imgPath, string titleSrc, DateTime dateSrc, int like, string langue, string userProposition, bool isvalid)
{
Id = id;
@ -28,6 +81,15 @@ namespace WF_WebAdmin.Model
UserProposition = userProposition;
IsValid = isvalid;
}
}
}
/*
public int Id { get; set; }
public string Content { get; set; }
@ -65,5 +127,5 @@ namespace WF_WebAdmin.Model
IdUserVerif = idUserVerif;
}
*/
}
}

@ -1,27 +1,65 @@
using System.ComponentModel.DataAnnotations;
namespace WF_WebAdmin.Model
namespace WF_WebAdmin.Model
{
/// <summary>
/// Modèle représentant une citation dans le système.
/// Ce modèle est utilisé pour la validation des données avant leur persistance.
/// </summary>
public class QuoteModel
{
/// <summary>
/// Identifiant unique de la citation.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Contenu de la citation.
/// La citation ne peut pas dépasser 300 caractères.
/// </summary>
[Required]
[StringLength(300, ErrorMessage = "La citation ne peut pas dépasser les 300 caractère.")]
[StringLength(300, ErrorMessage = "La citation ne peut pas dépasser les 300 caractères.")]
public string Content { get; set; }
/// <summary>
/// Nombre de "likes" que la citation a reçus.
/// </summary>
public int Like { get; set; }
/// <summary>
/// Langue dans laquelle la citation est écrite.
/// La langue est limitée à 2 caractères.
/// </summary>
[Required]
[StringLength(2, ErrorMessage = "La langue ne peut pas dépasser 2 caractère.")]
[StringLength(2, ErrorMessage = "La langue ne peut pas dépasser 2 caractères.")]
public string Langue { get; set; }
/// <summary>
/// Caractère associé à la citation (ex : auteur ou personnage).
/// </summary>
public string Charac { get; set; }
/// <summary>
/// Chemin d'accès à l'image associée à la citation.
/// </summary>
public string ImgPath { get; set; }
/// <summary>
/// Titre de la source de la citation (ex : livre, film, etc.).
/// </summary>
public string TitleSrc { get; set; }
/// <summary>
/// Date de la source de la citation.
/// </summary>
public DateTime DateSrc { get; set; }
/// <summary>
/// Nom de l'utilisateur ayant proposé la citation.
/// </summary>
public string UserProposition { get; set; }
/// <summary>
/// Indique si la citation est validée par le système.
/// </summary>
public bool IsValid { get; set; }
}
}

@ -1,11 +1,25 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente une source d'une citation dans le système.
/// Cette classe contient des informations sur la source d'une citation, telles que son titre et sa date de publication.
/// </summary>
public class Source
{
/// <summary>
/// Identifiant unique de la source.
/// </summary>
public int id_source { get; set; }
/// <summary>
/// Titre de la source, tel qu'un livre, un article ou une œuvre.
/// </summary>
public string title { get; set; }
/// <summary>
/// Date de publication de la source.
/// Il s'agit d'une représentation de l'année sous forme d'entier.
/// </summary>
public int date { get; set; }
}
}

@ -1,17 +1,55 @@
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente un utilisateur dans le système.
/// Cette classe contient des informations sur l'utilisateur, telles que son image, son nom, son email, la date de création de son compte,
/// son statut d'administrateur et les commentaires qu'il a publiés.
/// </summary>
public class User
{
/// <summary>
/// Identifiant unique de l'utilisateur.
/// </summary>
public int Id { get; set; }
/// <summary>
/// URL de l'image de profil de l'utilisateur.
/// </summary>
public string Image { get; set; }
/// <summary>
/// Nom de l'utilisateur.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Adresse email de l'utilisateur.
/// </summary>
public string Email { get; set; }
/// <summary>
/// Date de création du compte utilisateur.
/// </summary>
public DateTime DateCreation { get; set; }
public Boolean IsAdmin { get; set; }
/// <summary>
/// Indique si l'utilisateur a des privilèges d'administrateur.
/// </summary>
public bool IsAdmin { get; set; }
/// <summary>
/// Liste des commentaires publiés par l'utilisateur.
/// </summary>
public List<Commentary> Comments { get; set; }
/// <summary>
/// Constructeur pour créer un nouvel utilisateur avec des informations spécifiques.
/// </summary>
/// <param name="image">URL de l'image de profil de l'utilisateur.</param>
/// <param name="name">Nom de l'utilisateur.</param>
/// <param name="email">Adresse email de l'utilisateur.</param>
/// <param name="dateCreation">Date de création du compte de l'utilisateur.</param>
/// <param name="isAdmin">Indicateur si l'utilisateur est un administrateur.</param>
public User(string image, string name, string email, DateTime dateCreation, bool isAdmin)
{
this.Image = image;
@ -21,6 +59,9 @@
IsAdmin = isAdmin;
}
/// <summary>
/// Constructeur par défaut pour créer un utilisateur sans initialiser ses propriétés.
/// </summary>
public User() { }
}
}

@ -1,14 +1,45 @@
using System;
namespace WF_WebAdmin.Model
namespace WF_WebAdmin.Model
{
/// <summary>
/// Représente un utilisateur dans le système de connexion.
/// Cette classe contient des informations nécessaires pour l'authentification et la gestion du profil utilisateur.
/// </summary>
public class UserLogin
{
/// <summary>
/// Identifiant unique de l'utilisateur.
/// </summary>
public int Id { get; set; }
/// <summary>
/// URL de l'image de profil de l'utilisateur.
/// </summary>
public string Image { get; set; }
public string Name { get; set;}
public Boolean IsAdmin { get; set; }
/// <summary>
/// Nom de l'utilisateur.
/// </summary>
public string Name { get; set; }
/// <summary>
/// Indique si l'utilisateur possède des privilèges d'administrateur.
/// </summary>
public bool IsAdmin { get; set; }
/// <summary>
/// Mot de passe de l'utilisateur.
/// </summary>
public string Mdp { get; set; }
public UserLogin(int id,string image, string name, bool isAdmin, string mdp)
/// <summary>
/// Constructeur pour créer un objet <see cref="UserLogin"/> avec des informations d'authentification et de profil.
/// </summary>
/// <param name="id">Identifiant de l'utilisateur.</param>
/// <param name="image">URL de l'image de profil de l'utilisateur.</param>
/// <param name="name">Nom de l'utilisateur.</param>
/// <param name="isAdmin">Indicateur si l'utilisateur est un administrateur.</param>
/// <param name="mdp">Mot de passe de l'utilisateur.</param>
public UserLogin(int id, string image, string name, bool isAdmin, string mdp)
{
Id = id;
this.Image = image;
@ -17,6 +48,9 @@ namespace WF_WebAdmin.Model
this.Mdp = mdp;
}
/// <summary>
/// Constructeur par défaut pour créer un objet <see cref="UserLogin"/> sans initialiser les propriétés.
/// </summary>
public UserLogin() { }
}
}

@ -3,25 +3,45 @@ using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Localization;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Page d'accueil qui affiche des citations quotidiennes.
/// </summary>
public partial class Accueil
{
/// <summary>
/// Tableau contenant les citations quotidiennes.
/// </summary>
private Quote[] Dailyquote;
/// <summary>
/// Service HttpClient pour faire des requêtes HTTP.
/// </summary>
[Inject]
public HttpClient Http { get; set; }
/// <summary>
/// Service NavigationManager pour la gestion de la navigation dans l'application.
/// </summary>
[Inject]
public NavigationManager NavigationManager { get; set; }
/// <summary>
/// Service pour la localisation des ressources (traductions) sur la page.
/// </summary>
[Inject]
public IStringLocalizer<Accueil> Localizer { get; set; }
/// <summary>
/// Méthode appelée lors de l'initialisation du composant.
/// Elle charge les citations quotidiennes depuis un fichier JSON.
/// </summary>
/// <returns>Une tâche représentant l'opération asynchrone.</returns>
protected override async Task OnInitializedAsync()
{
// Chargement des citations quotidiennes depuis le fichier JSON
Dailyquote = await Http.GetFromJsonAsync<Quote[]>($"{NavigationManager.BaseUri}fake-dataDailyQuote.json");
}
}
}

@ -3,7 +3,7 @@ using WF_WebAdmin.Service;
using WF_WebAdmin.Model;
using Microsoft.AspNetCore.Mvc;
using System.Text.RegularExpressions;
using System;
namespace WF_WebAdmin.Pages
{
@ -17,12 +17,16 @@ namespace WF_WebAdmin.Pages
private QuizModel QuizModel = new();
/// <summary>
/// Handles the form submission to create a new quiz.
/// </summary>
private async void HandleValidSubmit()
{
int id;
id = await quizService.getNbQuiz();
id++;
id = await quizService.getNbQuiz(); // Fetch the current quiz count
id++; // Increment the quiz ID to create a new quiz ID
// Create and add the quiz using the validated inputs
await quizService.addQuiz(new Quiz(
id,
validateInformation(QuizModel.Question),
@ -32,48 +36,56 @@ namespace WF_WebAdmin.Pages
validateInformation(QuizModel.AnswerD),
validateReponse(QuizModel.CAnswer)
));
// Navigate to the quiz management page after adding the quiz
NavigationManager.NavigateTo("modifquiz");
}
/// <summary>
/// Handles the change in the correct answer selection.
/// </summary>
private void OnCAwnserChange(string item, object checkedValue)
{
QuizModel.CAnswer = item;
}
/// <summary>
/// Validates each input (question or answers) to ensure it isn't null or empty.
/// </summary>
private static string validateInformation(string item)
{
return item; // VALIDATION A FAIRE
if (string.IsNullOrWhiteSpace(item))
{
throw new ArgumentException("Input cannot be empty or whitespace.");
}
return item; // Return the valid input
}
/// <summary>
/// Validates the selected correct answer to be one of the valid options (A, B, C, D).
/// </summary>
private static string validateReponse(string item)
{
try
{
if (!string.IsNullOrEmpty(item))
{
switch (item)
if (string.IsNullOrEmpty(item))
{
case "A":
break;
case "B":
break;
case "C":
break;
case "D":
break;
default:
throw new InvalidDataException("Invalid item (validateReponse) : item must be A,B,C or D " + item + "give.");
}
throw new ArgumentNullException("Correct answer must be selected.");
}
else
// Ensure the answer is one of A, B, C, or D
if (!Regex.IsMatch(item, "^[A-D]$"))
{
throw new ArgumentNullException("Invalid item (validateReponse): null given.");
throw new InvalidDataException($"Invalid answer choice: '{item}'. Answer must be one of A, B, C, or D.");
}
return item;
return item; // Return the valid answer
}
catch (Exception ex)
{
return "A"; //Default Argument
// Log error or show a message to the user
Console.WriteLine(ex.Message);
return "A"; // Return default answer "A" if validation fails
}
}
}

@ -1,6 +1,5 @@
using Blazorise.DataGrid;
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Configuration.UserSecrets;
using Microsoft.Extensions.Localization;
using System.Collections.Generic;
using WF_WebAdmin.Model;
@ -8,21 +7,65 @@ using WF_WebAdmin.Service;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Page permettant de gérer les utilisateurs, y compris la suppression, la modification, et l'attribution du rôle admin.
/// </summary>
public partial class DeleteUser
{
/// <summary>
/// Indicateur pour afficher ou non la popup de confirmation de suppression.
/// </summary>
private bool showDeletePopup = false;
/// <summary>
/// Indicateur pour afficher ou non la popup de confirmation de modification d'utilisateur.
/// </summary>
private bool showModifyPopup = false;
/// <summary>
/// Liste des utilisateurs à afficher dans la page.
/// </summary>
private List<User> users;
/// <summary>
/// Utilisateur sélectionné pour la suppression.
/// </summary>
private User userToDelete = null;
/// <summary>
/// Utilisateur sélectionné pour la modification.
/// </summary>
private User selectedUser;
/// <summary>
/// Indicateur pour afficher ou non la popup de confirmation de suppression.
/// </summary>
private bool showPopupDelete = false;
/// <summary>
/// Indicateur pour afficher ou non la popup de confirmation de l'attribution du rôle admin.
/// </summary>
private bool showPopupAdmin = false;
/// <summary>
/// Utilisateur sélectionné pour devenir administrateur.
/// </summary>
private User userToAdmin = null;
/// <summary>
/// Nombre maximum d'utilisateurs à afficher par page.
/// </summary>
private int MaxValue = 5;
/// <summary>
/// Nombre total d'utilisateurs dans la base de données.
/// </summary>
private int totalItem;
private int page = 1;
/// <summary>
/// Numéro de la page actuelle dans le DataGrid.
/// </summary>
private int page = 1;
[Inject]
public HttpClient Http { get; set; }
@ -30,19 +73,30 @@ namespace WF_WebAdmin.Pages
[Inject]
public NavigationManager NavigationManager { get; set; }
/// <summary>
/// Service permettant de gérer les utilisateurs (CRUD).
/// </summary>
[Inject]
private IUserService userService { get; set; }
/// <summary>
/// Localisateur de chaîne pour gérer la localisation de la page.
/// </summary>
[Inject]
public IStringLocalizer<DeleteUser> Localizer { get; set; }
/// <summary>
/// Méthode appelée lors de l'initialisation de la page. Charge les utilisateurs à afficher.
/// </summary>
protected override async Task OnInitializedAsync()
{
// Charge la première page des utilisateurs
users = await userService.getSomeUser(MaxValue, 1);
}
/// <summary>
/// Méthode appelée lors de la lecture des données dans le DataGrid. Gère la pagination et l'affichage des utilisateurs.
/// </summary>
private async Task OnReadData(DataGridReadDataEventArgs<User> e)
{
if (e.CancellationToken.IsCancellationRequested)
@ -50,48 +104,62 @@ namespace WF_WebAdmin.Pages
return;
}
// Récupère les utilisateurs pour la page demandée
var response = await userService.getSomeUser(e.PageSize, e.Page);
if (!e.CancellationToken.IsCancellationRequested)
{
totalItem = await userService.getNbUser();
users = new List<User>(response.ToArray());
page = e.Page;
totalItem = await userService.getNbUser(); // Récupère le nombre total d'utilisateurs
users = new List<User>(response.ToArray()); // Met à jour la liste des utilisateurs
page = e.Page; // Met à jour le numéro de la page
}
}
// ------- Popup remove user -------
/// <summary>
/// Affiche la popup de confirmation de suppression de l'utilisateur sélectionné.
/// </summary>
private void ShowConfirmation(User user)
{
userToDelete = user;
showPopupDelete = true;
}
/// <summary>
/// Affiche la popup de modification de l'utilisateur sélectionné.
/// </summary>
private void ShowModifyConfirmation(User user)
{
// Afficher la modale et mémoriser l'utilisateur à supprimer
selectedUser = user;
showModifyPopup = true;
}
/// <summary>
/// Supprime l'utilisateur sélectionné et met à jour la liste des utilisateurs affichés.
/// </summary>
private async Task RemoveUser()
{
if (userToDelete != null)
{
await userService.removeUser(userToDelete);
ClosePopup();
var response = await userService.getSomeUser(MaxValue, page);
users = new List<User>(response.ToArray());
await userService.removeUser(userToDelete); // Appelle le service pour supprimer l'utilisateur
ClosePopup(); // Ferme les popups
var response = await userService.getSomeUser(MaxValue, page); // Récupère à nouveau les utilisateurs
users = new List<User>(response.ToArray()); // Met à jour la liste des utilisateurs
}
}
/// <summary>
/// Met à jour l'utilisateur sélectionné.
/// </summary>
private async Task ModifyUser()
{
await userService.updateUser(selectedUser);
ClosePopup();
await userService.updateUser(selectedUser); // Appelle le service pour mettre à jour l'utilisateur
ClosePopup(); // Ferme les popups
}
/// <summary>
/// Ferme toutes les popups actuellement ouvertes.
/// </summary>
private void ClosePopup()
{
showDeletePopup = false;
@ -100,31 +168,33 @@ namespace WF_WebAdmin.Pages
showPopupAdmin = false;
}
// ------- Popup admin -------
/// <summary>
/// Affiche la popup de confirmation pour attribuer ou révoquer le rôle d'administrateur.
/// </summary>
private void ShowConfirmationAdmin(User user)
{
userToAdmin = user;
showPopupAdmin = true;
}
/// <summary>
/// Attribue ou révoque le rôle d'administrateur pour l'utilisateur sélectionné.
/// </summary>
private async Task setAdmin()
{
if (!userToAdmin.IsAdmin)
if (!userToAdmin.IsAdmin) // Si l'utilisateur n'est pas administrateur, on l'attribue comme admin
{
userToAdmin.IsAdmin = true;
await userService.updateUser(userToAdmin);
ClosePopup();
await userService.updateUser(userToAdmin); // Met à jour l'utilisateur
ClosePopup(); // Ferme les popups
}
else
else // Si l'utilisateur est déjà administrateur, on révoque ce rôle
{
userToAdmin.IsAdmin = false;
await userService.updateUser(userToAdmin);
ClosePopup();
await userService.updateUser(userToAdmin); // Met à jour l'utilisateur
ClosePopup(); // Ferme les popups
}
}
}
}

@ -4,28 +4,59 @@ using WF_WebAdmin.Service;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Page permettant de modifier une citation existante.
/// </summary>
public partial class Edit
{
/// <summary>
/// Identifiant de la citation à éditer passé en paramètre de la route.
/// </summary>
[Parameter]
public int Id { get; set; }
/// <summary>
/// Service pour gérer les citations.
/// </summary>
[Inject]
private IQuoteService quoteService { get; set; }
/// <summary>
/// Service pour la navigation entre les pages.
/// </summary>
[Inject]
public NavigationManager NavigationManager { get; set; }
private Quote q{ get; set; }
/// <summary>
/// Citation actuelle à éditer.
/// </summary>
private Quote q { get; set; }
/// <summary>
/// Modèle de données pour l'édition de la citation.
/// </summary>
private QuoteModel quoteModel = new();
/// <summary>
/// Liste des personnages disponibles pour l'édition.
/// </summary>
private List<Character> charac = new List<Character>();
/// <summary>
/// Liste des sources disponibles pour l'édition.
/// </summary>
private List<Source> src = new List<Source>();
/// <summary>
/// Méthode appelée lors de l'initialisation de la page.
/// Elle charge la citation à éditer ainsi que les données associées (personnages, sources).
/// </summary>
protected override async Task OnInitializedAsync()
{
// Récupère la citation à éditer à partir de l'ID
q = await quoteService.getOnequote(Id);
// Initialise le modèle de données avec les informations de la citation
quoteModel.Content = q.Content;
quoteModel.Langue = q.Langue;
quoteModel.Charac = q.Charac;
@ -36,30 +67,43 @@ namespace WF_WebAdmin.Pages
quoteModel.DateSrc = q.DateSrc;
quoteModel.UserProposition = q.UserProposition;
quoteModel.IsValid = q.IsValid;
// Charge la liste des personnages et des sources
charac = await quoteService.getChar();
src = await quoteService.getSrc();
}
/// <summary>
/// Méthode appelée lors de la soumission valide du formulaire d'édition.
/// Elle met à jour la citation avec les nouvelles données.
/// </summary>
protected async void HandleValidSubmit()
{
// Met à jour les informations de la citation
q.Content = quoteModel.Content;
q.Langue = quoteModel.Langue;
q.TitleSrc = quoteModel.TitleSrc;
q.Charac = quoteModel.Charac;
// Appelle le service pour mettre à jour la citation dans la base de données
await quoteService.updateQuote(q);
// Redirige vers la page des citations à modifier
NavigationManager.NavigateTo("modifquote");
}
/// <summary>
/// Méthode appelée lors du changement de langue dans le formulaire.
/// </summary>
/// <param name="item">Langue sélectionnée.</param>
/// <param name="checkedValue">Valeur de l'élément vérifié.</param>
private void OnlangChange(string item, object checkedValue)
{
if(item == "fr" || item == "en")
// Si la langue est "fr" ou "en", met à jour la langue dans le modèle de données
if (item == "fr" || item == "en")
{
quoteModel.Langue = item;
}
}
}
}

@ -4,23 +4,41 @@ using System.Diagnostics;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Modèle de page Razor pour afficher les erreurs dans l'application.
/// </summary>
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[IgnoreAntiforgeryToken]
public class ErrorModel : PageModel
{
/// <summary>
/// Identifiant unique de la requête pour le suivi des erreurs.
/// </summary>
public string? RequestId { get; set; }
/// <summary>
/// Indicateur pour afficher l'ID de la requête si ce dernier est disponible.
/// </summary>
public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
private readonly ILogger<ErrorModel> _logger;
/// <summary>
/// Constructeur pour initialiser le modèle de page avec le service de journalisation.
/// </summary>
/// <param name="logger">Service de journalisation pour capturer les erreurs.</param>
public ErrorModel(ILogger<ErrorModel> logger)
{
_logger = logger;
}
/// <summary>
/// Méthode appelée lors de l'accès à la page d'erreur.
/// Elle enregistre l'ID de la requête pour la journalisation et l'affichage des erreurs.
/// </summary>
public void OnGet()
{
// Capture de l'ID de la requête à partir de l'activité en cours ou du trace identifier
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}
}

@ -1,70 +1,101 @@
using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Configuration.UserSecrets;
using Microsoft.Extensions.Localization;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Composant Blazor pour la gestion de la connexion des utilisateurs.
/// </summary>
public partial class Login
{
/// <summary>
/// Service de localisation pour gérer les textes multilingues dans la page de connexion.
/// </summary>
[Inject]
public IStringLocalizer<Login> Localizer { get; set; }
/// <summary>
/// Objet représentant les informations de connexion de l'utilisateur.
/// </summary>
private UserLogin userLogin = new UserLogin();
/// <summary>
/// Objet représentant l'utilisateur connecté.
/// </summary>
[Inject]
public UserLogin uLogin { get; set; }
/// <summary>
/// Message d'erreur affiché en cas de connexion échouée.
/// </summary>
private string ErrorConnexion;
/// <summary>
/// Liste des utilisateurs enregistrés pour la connexion.
/// </summary>
private List<UserLogin> usersConnexion;
/// <summary>
/// Service HTTP pour effectuer des requêtes.
/// </summary>
[Inject]
public HttpClient Http { get; set; }
/// <summary>
/// Service de gestion de la navigation dans l'application Blazor.
/// </summary>
[Inject]
public NavigationManager NavigationManager { get; set; }
/// <summary>
/// Méthode appelée lors de l'initialisation du composant pour charger les données des utilisateurs.
/// </summary>
/// <returns>Une tâche asynchrone représentant l'initialisation du composant.</returns>
protected override async Task OnInitializedAsync()
{
// Chargement des utilisateurs depuis un fichier JSON simulé.
usersConnexion = await Http.GetFromJsonAsync<List<UserLogin>>($"{NavigationManager.BaseUri}fake-dataUserLogin.json");
}
/// <summary>
/// Méthode pour valider les informations de connexion de l'utilisateur.
/// </summary>
public void validlogin()
{
// Vérification si les informations de connexion sont renseignées
if (!string.IsNullOrEmpty(userLogin.Name) || !string.IsNullOrEmpty(userLogin.Mdp))
{
foreach (var user in usersConnexion)
{
if(userLogin.Name == user.Name && userLogin.Mdp == user.Mdp)
// Vérification si les identifiants correspondent
if (userLogin.Name == user.Name && userLogin.Mdp == user.Mdp)
{
if(user.IsAdmin)
// Vérification si l'utilisateur est un administrateur
if (user.IsAdmin)
{
// Assignation de l'utilisateur à la session
uLogin.Id = userLogin.Id;
uLogin.Name = user.Name;
uLogin.Image = user.Image;
// Redirection vers la page d'accueil
NavigationManager.NavigateTo(NavigationManager.BaseUri + "accueil");
return;
}
else
{
// Message d'erreur pour utilisateur non admin
ErrorConnexion = "Connexion échouée, le nom ou le mot de passe sont incorrectes";
}
}
else
{
// Message d'erreur pour informations invalides
ErrorConnexion = "Connexion échouée, le nom ou le mot de passe sont incorrectes";
}
}
}
}
}
}

@ -5,25 +5,56 @@ using WF_WebAdmin.Service;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Composant Blazor pour la gestion des quiz, permettant leur modification et suppression.
/// </summary>
public partial class ModifQuiz
{
/// <summary>
/// Liste des quiz à afficher dans le tableau.
/// </summary>
private Quiz[] quiz;
/// <summary>
/// Valeur maximale d'éléments par page.
/// </summary>
private int MaxValue = 5;
/// <summary>
/// Nombre total d'éléments dans la liste des quiz.
/// </summary>
private int totalItem;
/// <summary>
/// Indicateur de l'affichage de la popup de modification du quiz.
/// </summary>
private bool showEditQuiz = false;
/// <summary>
/// Quiz actuellement sélectionné pour modification.
/// </summary>
private Quiz? selectedQuiz;
/// <summary>
/// Indicateur de l'affichage de la popup de suppression.
/// </summary>
private bool showPopupDelete = false;
/// <summary>
/// Numéro de la page actuellement affichée.
/// </summary>
private int page = 1;
/// <summary>
/// Service pour gérer les quiz injecté.
/// </summary>
[Inject]
public IQuizService QuizService { get; set; }
/// <summary>
/// Méthode appelée pour récupérer les données de la page actuelle dans le tableau.
/// </summary>
/// <param name="e">Arguments de lecture de données pour le DataGrid.</param>
private async Task OnReadData(DataGridReadDataEventArgs<Quiz> e)
{
if (e.CancellationToken.IsCancellationRequested)
@ -41,6 +72,10 @@ namespace WF_WebAdmin.Pages
}
}
/// <summary>
/// Méthode pour afficher la popup de modification d'un quiz.
/// </summary>
/// <param name="quiz">Quiz à modifier.</param>
private void OnEditButtonClicked(Quiz quiz)
{
if (quiz == null) return;
@ -48,6 +83,9 @@ namespace WF_WebAdmin.Pages
showEditQuiz = true;
}
/// <summary>
/// Méthode pour fermer la popup (modification ou suppression).
/// </summary>
private void ClosePopup()
{
showEditQuiz = false;
@ -55,19 +93,32 @@ namespace WF_WebAdmin.Pages
selectedQuiz = null;
}
/// <summary>
/// Méthode pour modifier un quiz sélectionné.
/// </summary>
private async Task EditQuiz()
{
if (selectedQuiz != null)
{
await QuizService.updateQuiz(selectedQuiz);
selectedQuiz = null;
ClosePopup();
}
}
/// <summary>
/// Méthode pour afficher la popup de suppression d'un quiz.
/// </summary>
/// <param name="q">Quiz à supprimer.</param>
private void OnDelete(Quiz q)
{
selectedQuiz = q;
showPopupDelete = true;
}
/// <summary>
/// Méthode pour supprimer un quiz sélectionné.
/// </summary>
private async void RemoveQuote()
{
if (selectedQuiz != null)
@ -77,7 +128,7 @@ namespace WF_WebAdmin.Pages
var response = await QuizService.getSommeQuiz(MaxValue, page);
quiz = response.ToArray();
}
showPopupDelete= false;
showPopupDelete = false;
}
}
}

@ -5,25 +5,51 @@ using WF_WebAdmin.Service;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Composant Blazor pour la gestion des citations, permettant la modification et la suppression de celles-ci.
/// </summary>
public partial class ModifQuote
{
/// <summary>
/// Liste des citations à afficher dans le tableau.
/// </summary>
private Quote[] quotes;
/// <summary>
/// Valeur maximale d'éléments par page.
/// </summary>
private int MaxValue = 5;
/// <summary>
/// Nombre total d'éléments dans la liste des citations.
/// </summary>
private int totalItem;
/*private bool showEditQuote = false;*/
/// <summary>
/// Citation actuellement sélectionnée pour modification.
/// </summary>
private Quote? selectedQuote;
/// <summary>
/// Indicateur de l'affichage de la popup de suppression.
/// </summary>
private bool showPopupDelete = false;
/// <summary>
/// Numéro de la page actuellement affichée.
/// </summary>
private int page = 1;
/// <summary>
/// Service pour gérer les citations injecté.
/// </summary>
[Inject]
public IQuoteService QuoteService { get; set; }
/// <summary>
/// Méthode appelée pour récupérer les données de la page actuelle dans le tableau.
/// </summary>
/// <param name="e">Arguments de lecture de données pour le DataGrid.</param>
private async Task OnReadData(DataGridReadDataEventArgs<Quote> e)
{
if (e.CancellationToken.IsCancellationRequested)
@ -41,33 +67,28 @@ namespace WF_WebAdmin.Pages
}
}
/*private void OnEditButtonClicked(Quote quote)
{
if (selectedQuote == null) return;
selectedQuote = quote;
showEditQuote = true;
}*/
/// <summary>
/// Méthode pour fermer la popup (modification ou suppression).
/// </summary>
private void ClosePopup()
{
/*showEditQuote = false;*/
showPopupDelete = false;
selectedQuote = null;
}
/*private async Task EditQuote()
{
await QuoteService.updateQuote(selectedQuote);
selectedQuote = null;
ClosePopup();
}*/
/// <summary>
/// Méthode appelée pour afficher la popup de suppression d'une citation.
/// </summary>
/// <param name="q">Citation à supprimer.</param>
private void OnDelete(Quote q)
{
selectedQuote = q;
showPopupDelete = true;
}
/// <summary>
/// Méthode pour supprimer une citation sélectionnée.
/// </summary>
private async void RemoveQuote()
{
if (selectedQuote != null)

@ -5,30 +5,55 @@ using WF_WebAdmin.Service;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Composant Blazor pour gérer la validation des quiz.
/// </summary>
public partial class ValidQuiz
{
/// <summary>
/// Liste des quiz à valider.
/// </summary>
private List<Quiz> quizzes;
/// <summary>
/// Client HTTP injecté pour effectuer des requêtes API.
/// </summary>
[Inject]
public HttpClient Http { get; set; }
/// <summary>
/// Gestionnaire de navigation injecté pour gérer les URL.
/// </summary>
[Inject]
public NavigationManager NavigationManager { get; set; }
/// <summary>
/// Service pour gérer les quiz injecté.
/// </summary>
[Inject]
public IQuizService QuizService { get; set; }
/// <summary>
/// Méthode appelée lors de l'initialisation du composant. Charge la liste des quiz à valider.
/// </summary>
protected override async Task OnInitializedAsync()
{
quizzes = await QuizService.getQuizzesToValidate();
}
/// <summary>
/// Méthode appelée lorsqu'on clique sur le bouton de validation d'un quiz.
/// </summary>
/// <param name="quiz">Le quiz à valider.</param>
private void OnValidButton(Quiz quiz)
{
ValidateQuiz(quiz);
}
/// <summary>
/// Valide un quiz en mettant à jour son état.
/// </summary>
/// <param name="quiz">Le quiz à valider.</param>
private void ValidateQuiz(Quiz quiz)
{
Console.WriteLine($"Quiz {quiz.Id} validated!");
@ -40,11 +65,19 @@ namespace WF_WebAdmin.Pages
QuizService.updateQuiz(quiz);
}
/// <summary>
/// Méthode appelée lorsqu'on clique sur le bouton de rejet d'un quiz.
/// </summary>
/// <param name="quiz">Le quiz à rejeter.</param>
private void OnRejectButton(Quiz quiz)
{
RejectQuiz(quiz);
}
/// <summary>
/// Rejette un quiz en supprimant son état de validation.
/// </summary>
/// <param name="quiz">Le quiz à rejeter.</param>
private void RejectQuiz(Quiz quiz)
{
Console.WriteLine($"Quiz {quiz.Id} rejected!");

@ -9,16 +9,31 @@ using System.Linq;
namespace WF_WebAdmin.Pages
{
/// <summary>
/// Composant Blazor pour afficher et valider des citations.
/// </summary>
public partial class ValidQuote
{
/// <summary>
/// Tableau contenant les citations à valider.
/// </summary>
private Quote[] quotes;
/// <summary>
/// Client HTTP injecté pour effectuer des requêtes API.
/// </summary>
[Inject]
public HttpClient Http { get; set; }
/// <summary>
/// Gestionnaire de navigation injecté pour gérer les URL.
/// </summary>
[Inject]
public NavigationManager NavigationManager { get; set; }
/// <summary>
/// Méthode appelée à l'initialisation du composant pour charger les citations.
/// </summary>
protected override async Task OnInitializedAsync()
{
quotes = await Http.GetFromJsonAsync<Quote[]>($"{NavigationManager.BaseUri}fake-dataQuote.json");

@ -2,25 +2,66 @@ using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service
{
/// <summary>
/// Interface définissant les opérations de gestion des quiz.
/// </summary>
public interface IQuizService
{
/// <summary>
/// Ajoute un quiz.
/// </summary>
/// <param name="quiz">Quiz à ajouter.</param>
public Task addQuiz(Quiz quiz);
/// <summary>
/// Met à jour un quiz existant.
/// </summary>
/// <param name="quiz">Quiz à mettre à jour.</param>
public Task updateQuiz(Quiz quiz);
/// <summary>
/// Supprime un quiz par son identifiant.
/// </summary>
/// <param name="id">Identifiant du quiz à supprimer.</param>
public Task removeQuiz(int id);
/// <summary>
/// Valide un quiz par son identifiant.
/// </summary>
/// <param name="id">Identifiant du quiz à valider.</param>
public Task validateQuiz(int id);
/// <summary>
/// Récupère la liste de tous les quiz.
/// </summary>
/// <returns>Liste de tous les quiz.</returns>
public Task<List<Quiz>> getQuizzes();
/// <summary>
/// Récupère la liste des quiz en attente de validation.
/// </summary>
/// <returns>Liste des quiz non validés.</returns>
public Task<List<Quiz>> getQuizzesToValidate();
/// <summary>
/// Récupère un quiz spécifique par son identifiant.
/// </summary>
/// <param name="id">Identifiant du quiz.</param>
/// <returns>Le quiz correspondant ou null s'il n'existe pas.</returns>
public Task<Quiz> getQuiz(int id);
/// <summary>
/// Récupère une liste paginée de quiz.
/// </summary>
/// <param name="nb">Nombre de quiz par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Liste des quiz correspondant à la pagination.</returns>
public Task<List<Quiz>> getSommeQuiz(int nb, int page);
/// <summary>
/// Récupère le nombre total de quiz enregistrés.
/// </summary>
/// <returns>Nombre total de quiz.</returns>
public Task<int> getNbQuiz();
}
}

@ -2,32 +2,94 @@
namespace WF_WebAdmin.Service
{
/// <summary>
/// Interface définissant les opérations de gestion des citations.
/// </summary>
public interface IQuoteService
{
/// <summary>
/// Ajoute une citation.
/// </summary>
/// <param name="quote">Citation à ajouter.</param>
public Task addQuote(Quote quote);
/// <summary>
/// Supprime une citation.
/// </summary>
/// <param name="quote">Citation à supprimer.</param>
public Task removeQuote(Quote quote);
/// <summary>
/// Valide une citation.
/// </summary>
/// <param name="quote">Citation à valider.</param>
public Task validQuote(Quote quote);
/// <summary>
/// Met à jour une citation existante.
/// </summary>
/// <param name="quote">Citation à mettre à jour.</param>
public Task updateQuote(Quote quote);
/// <summary>
/// Récupère toutes les citations.
/// </summary>
/// <returns>Liste de toutes les citations.</returns>
public Task<List<Quote>> getAllQuote();
/// <summary>
/// Récupère une liste paginée de citations.
/// </summary>
/// <param name="nb">Nombre de citations par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Liste des citations correspondant à la pagination.</returns>
public Task<List<Quote>> getSomeQuote(int nb, int page);
/// <summary>
/// Récupère une citation spécifique par son identifiant.
/// </summary>
/// <param name="id">Identifiant de la citation.</param>
/// <returns>La citation correspondante ou null si elle n'existe pas.</returns>
public Task<Quote> getOnequote(int id);
/// <summary>
/// Recherche des citations en fonction d'un critère.
/// </summary>
/// <param name="reserch">Terme de recherche.</param>
/// <param name="argument">Liste des arguments pour affiner la recherche.</param>
/// <returns>Liste des citations correspondant aux critères.</returns>
public Task<List<Quote>> reserchQuote(string reserch, List<string> argument);
/// <summary>
/// Récupère toutes les citations non validées.
/// </summary>
/// <returns>Liste des citations non validées.</returns>
public Task<List<Quote>> getAllQuoteInvalid();
/// <summary>
/// Récupère une liste paginée de citations non validées.
/// </summary>
/// <param name="nb">Nombre de citations par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Liste des citations non validées correspondant à la pagination.</returns>
public Task<List<Quote>> getSomeQuoteInvalid(int nb, int page);
/// <summary>
/// Récupère le nombre total de citations enregistrées.
/// </summary>
/// <returns>Nombre total de citations.</returns>
public Task<int> getNbQuote();
/// <summary>
/// Récupère la liste des personnages associés aux citations.
/// </summary>
/// <returns>Liste des personnages.</returns>
public Task<List<Character>> getChar();
/// <summary>
/// Récupère la liste des sources associées aux citations.
/// </summary>
/// <returns>Liste des sources.</returns>
public Task<List<Source>> getSrc();
}
}

@ -2,24 +2,68 @@
namespace WF_WebAdmin.Service
{
/// <summary>
/// Interface définissant les opérations de gestion des utilisateurs.
/// </summary>
public interface IUserService
{
/// <summary>
/// Supprime un utilisateur du système.
/// </summary>
/// <param name="user">Utilisateur à supprimer.</param>
public Task removeUser(User user);
/// <summary>
/// Met à jour le rôle d'un utilisateur.
/// </summary>
/// <param name="user">Utilisateur dont le rôle doit être mis à jour.</param>
public Task updateRole(User user);
/// <summary>
/// Rétrograde le rôle d'un utilisateur.
/// </summary>
/// <param name="user">Utilisateur à rétrograder.</param>
public Task downgradeRole(User user);
/// <summary>
/// Met à jour les informations d'un utilisateur.
/// </summary>
/// <param name="user">Utilisateur à mettre à jour.</param>
public Task updateUser(User user);
/// <summary>
/// Récupère la liste complète des utilisateurs.
/// </summary>
/// <returns>Liste des utilisateurs.</returns>
public Task<List<User>> getAllUser();
/// <summary>
/// Récupère une liste paginée d'utilisateurs.
/// </summary>
/// <param name="nb">Nombre d'utilisateurs par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Liste des utilisateurs correspondant à la pagination.</returns>
public Task<List<User>> getSomeUser(int nb, int page);
/// <summary>
/// Récupère un utilisateur spécifique par son identifiant.
/// </summary>
/// <param name="id">Identifiant de l'utilisateur.</param>
/// <returns>L'utilisateur correspondant ou null s'il n'existe pas.</returns>
public Task<User> getOneUser(int id);
/// <summary>
/// Recherche des utilisateurs en fonction d'un critère.
/// </summary>
/// <param name="reserch">Terme de recherche.</param>
/// <param name="args">Liste des arguments pour affiner la recherche.</param>
/// <returns>Liste des utilisateurs correspondant aux critères.</returns>
public Task<List<User>> reserchUsers(string reserch, List<string> args);
/// <summary>
/// Récupère le nombre total d'utilisateurs enregistrés.
/// </summary>
/// <returns>Nombre total d'utilisateurs.</returns>
public Task<int> getNbUser();
}
}

@ -1,18 +1,29 @@
using System.Text.Json;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service;
public class QuizServiceStub: IQuizService
namespace WF_WebAdmin.Service
{
/// <summary>
/// Service de gestion des quiz utilisant un fichier JSON comme stockage de données.
/// </summary>
public class QuizServiceStub : IQuizService
{
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_quiz.json");
/// <summary>
/// Sauvegarde la liste des quiz dans un fichier JSON.
/// </summary>
/// <param name="quizzes">Liste des quiz à sauvegarder.</param>
public async Task saveQuizJson(List<Quiz> quizzes)
{
var json = JsonSerializer.Serialize(quizzes, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(_jsonFilePath, json);
}
/// <summary>
/// Ajoute un quiz à la liste et le sauvegarde dans le fichier JSON.
/// </summary>
/// <param name="quiz">Quiz à ajouter.</param>
public async Task addQuiz(Quiz quiz)
{
var data = await getQuizzes();
@ -21,6 +32,10 @@ public class QuizServiceStub: IQuizService
await saveQuizJson(data);
}
/// <summary>
/// Met à jour un quiz existant dans la liste et le sauvegarde.
/// </summary>
/// <param name="quiz">Quiz mis à jour.</param>
public async Task updateQuiz(Quiz quiz)
{
var data = await getQuizzes();
@ -39,6 +54,10 @@ public class QuizServiceStub: IQuizService
}
}
/// <summary>
/// Supprime un quiz de la liste et met à jour le fichier JSON.
/// </summary>
/// <param name="id">Identifiant du quiz à supprimer.</param>
public async Task removeQuiz(int id)
{
var data = await getQuizzes();
@ -50,11 +69,19 @@ public class QuizServiceStub: IQuizService
}
}
/// <summary>
/// Valide un quiz (non implémenté).
/// </summary>
/// <param name="id">Identifiant du quiz à valider.</param>
public Task validateQuiz(int id)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère la liste complète des quiz à partir du fichier JSON.
/// </summary>
/// <returns>Liste des quiz.</returns>
public async Task<List<Quiz>> getQuizzes()
{
if (!File.Exists(_jsonFilePath))
@ -67,12 +94,21 @@ public class QuizServiceStub: IQuizService
return JsonSerializer.Deserialize<List<Quiz>>(json) ?? new List<Quiz>();
}
/// <summary>
/// Récupère la liste des quiz non validés.
/// </summary>
/// <returns>Liste des quiz en attente de validation.</returns>
public async Task<List<Quiz>> getQuizzesToValidate()
{
var quizzes = await getQuizzes();
return quizzes.Where(quiz => quiz.IsValid == false).ToList();
}
/// <summary>
/// Récupère un quiz spécifique par son identifiant.
/// </summary>
/// <param name="id">Identifiant du quiz.</param>
/// <returns>Le quiz correspondant ou null s'il n'existe pas.</returns>
public async Task<Quiz> getQuiz(int id)
{
var data = await getQuizzes();
@ -84,23 +120,34 @@ public class QuizServiceStub: IQuizService
return null;
}
/// <summary>
/// Récupère une liste paginée de quiz.
/// </summary>
/// <param name="nb">Nombre de quiz par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Liste des quiz correspondant à la pagination.</returns>
public async Task<List<Quiz>> getSommeQuiz(int nb, int page)
{
var data = await getQuizzes();
if ((page - 1) * nb + nb > data.Count())
{
if(nb > data.Count())
if (nb > data.Count())
{
return data.GetRange(0, data.Count()-1);
return data.GetRange(0, data.Count() - 1);
}
return data.GetRange(data.Count() - nb, nb);
}
return data.GetRange((page - 1) * nb, nb);
}
/// <summary>
/// Récupère le nombre total de quiz enregistrés.
/// </summary>
/// <returns>Nombre total de quiz.</returns>
public async Task<int> getNbQuiz()
{
var data = await getQuizzes();
return data.Count;
}
}
}

@ -4,29 +4,30 @@ using Npgsql;
namespace WF_WebAdmin.Service
{
public class QuoteServiceLocal: IQuoteService
/// <summary>
/// Service de gestion des citations utilisant une base de données PostgreSQL.
/// </summary>
public class QuoteServiceLocal : IQuoteService
{
private readonly string? _connectionString = "Host=localhost;Port=5432;Username=loguichard3;Password=Reglisse15.;Database=dbloguichard3";
/// <summary>
/// Ajoute une nouvelle citation à la base de données PostgreSQL.
/// </summary>
/// <param name="quote">Citation à ajouter.</param>
/// <returns>Un objet <see cref="QuoteDTO"/> représentant la citation ajoutée.</returns>
public async Task<QuoteDTO> AddQuoteAsync(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
// Utilisation de NpgsqlConnection pour PostgreSQL
using (var connection = new NpgsqlConnection(_connectionString))
{
// Définir la requête SQL d'insertion
var commandText = "INSERT INTO Quote (content, langue, reason, id_source, id_caracter, id_user_verif, img_path) " +
"VALUES (@content, @langue, @reason, @source, @character, @user, @img_path)";
// Créer une commande Npgsql
var command = new NpgsqlCommand(commandText, connection);
/*
// Ajouter des paramètres à la commande
command.Parameters.AddWithValue("@content", quote.Content);
@ -38,32 +39,28 @@ namespace WF_WebAdmin.Service
command.Parameters.AddWithValue("@img_path", quote.ImgPath);
*/
try
{
// Ouvrir la connexion à la base de données
await connection.OpenAsync();
// Exécuter la commande d'insertion
await command.ExecuteNonQueryAsync();
}
catch (Exception ex)
{
// Gérer les erreurs ici (par exemple, afficher ou enregistrer les erreurs)
Console.WriteLine($"Une erreur est survenue lors de l'ajout de la citation : {ex.Message}");
}
finally
{
// Fermer la connexion (automatiquement géré avec `using`, mais ajouté pour explicitement montrer le processus)
await connection.CloseAsync();
}
}
// Retourner l'objet DTO pour que vous puissiez l'utiliser ailleurs dans votre application
return quoteDTO;
}
/// <summary>
/// Supprime une citation de la base de données.
/// </summary>
/// <param name="quote">Citation à supprimer.</param>
public Task RemoveQuote(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
@ -72,6 +69,10 @@ namespace WF_WebAdmin.Service
return Task.FromResult(quoteDTO);
}
/// <summary>
/// Valide une citation.
/// </summary>
/// <param name="quote">Citation à valider.</param>
public Task validQuote(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
@ -80,6 +81,10 @@ namespace WF_WebAdmin.Service
return Task.FromResult(quoteDTO);
}
/// <summary>
/// Met à jour une citation existante.
/// </summary>
/// <param name="quote">Citation mise à jour.</param>
public Task updateQuote(Quote quote)
{
QuoteExtension extension = new QuoteExtension();
@ -88,61 +93,89 @@ namespace WF_WebAdmin.Service
return Task.FromResult(quoteDTO);
}
/// <summary>
/// Ajoute une citation (non implémenté).
/// </summary>
public Task addQuote(Quote quote)
{
throw new NotImplementedException();
}
/// <summary>
/// Supprime une citation (non implémenté).
/// </summary>
public Task removeQuote(Quote quote)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère toutes les citations (non implémenté).
/// </summary>
public Task<List<Quote>> getAllQuote()
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère un ensemble de citations paginées (non implémenté).
/// </summary>
public Task<List<Quote>> getSomeQuote(int nb, int page)
{
throw new NotImplementedException();
}
/// <summary>
/// Recherche des citations selon des critères spécifiques (non implémenté).
/// </summary>
public Task<List<Quote>> reserchQuote(string reserch, List<string> argument)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère toutes les citations invalides (non implémenté).
/// </summary>
public Task<List<Quote>> getAllQuoteInvalid()
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère une liste paginée de citations invalides (non implémenté).
/// </summary>
public Task<List<Quote>> getSomeQuoteInvalid(int nb, int page)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère une citation spécifique en fonction de son ID (non implémenté).
/// </summary>
public Task<Quote> getOnequote(int id)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère le nombre total de citations enregistrées (non implémenté).
/// </summary>
public Task<int> getNbQuote()
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère la liste des personnages (non implémenté).
/// </summary>
public Task<List<Character>> getChar()
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère la liste des sources (non implémenté).
/// </summary>
public Task<List<Source>> getSrc()
{
throw new NotImplementedException();

@ -3,18 +3,29 @@ using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service;
public class QuoteServiceStub : IQuoteService
{
/// <summary>
/// Service de gestion des citations utilisant un fichier JSON comme stockage.
/// </summary>
public class QuoteServiceStub : IQuoteService
{
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake-dataQuote.json");
private readonly string _char = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake-dataCaracter.json");
private readonly string _src = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake-dataSource.json");
/// <summary>
/// Sauvegarde la liste des citations dans le fichier JSON.
/// </summary>
/// <param name="quotes">Liste des citations à sauvegarder.</param>
public async Task saveQuoteJson(List<Quote> quotes)
{
var json = JsonSerializer.Serialize(quotes, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(_jsonFilePath, json);
}
/// <summary>
/// Ajoute une nouvelle citation et l'enregistre dans le fichier JSON.
/// </summary>
/// <param name="quote">Citation à ajouter.</param>
public async Task addQuote(Quote quote)
{
var data = await getAllQuote();
@ -23,6 +34,10 @@ namespace WF_WebAdmin.Service;
await saveQuoteJson(data);
}
/// <summary>
/// Supprime une citation et met à jour le fichier JSON.
/// </summary>
/// <param name="quote">Citation à supprimer.</param>
public async Task removeQuote(Quote quote)
{
var data = await getAllQuote();
@ -34,11 +49,19 @@ namespace WF_WebAdmin.Service;
}
}
/// <summary>
/// Marque une citation comme valide.
/// </summary>
/// <param name="quote">Citation à valider.</param>
public async Task validQuote(Quote quote)
{
throw new NotImplementedException();
}
/// <summary>
/// Met à jour une citation existante.
/// </summary>
/// <param name="quote">Citation mise à jour.</param>
public async Task updateQuote(Quote quote)
{
var data = await getAllQuote();
@ -55,6 +78,10 @@ namespace WF_WebAdmin.Service;
}
}
/// <summary>
/// Récupère toutes les citations stockées dans le fichier JSON.
/// </summary>
/// <returns>Une liste de citations.</returns>
public async Task<List<Quote>> getAllQuote()
{
if (!File.Exists(_jsonFilePath))
@ -67,36 +94,53 @@ namespace WF_WebAdmin.Service;
return JsonSerializer.Deserialize<List<Quote>>(json) ?? new List<Quote>();
}
/// <summary>
/// Récupère une liste paginée de citations.
/// </summary>
/// <param name="nb">Nombre de citations par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Une liste de citations correspondant à la page demandée.</returns>
public async Task<List<Quote>> getSomeQuote(int nb, int page)
{
var quotes = await getAllQuote();
if((page - 1) * nb + nb > quotes.Count())
if ((page - 1) * nb + nb > quotes.Count())
{
if (nb > quotes.Count())
{
return quotes.GetRange(0, quotes.Count());
}
return quotes.GetRange(quotes.Count()-nb, nb);
return quotes.GetRange(quotes.Count() - nb, nb);
}
return quotes.GetRange((page - 1) * nb, nb);
}
/// <summary>
/// Récupère une citation spécifique en fonction de son ID.
/// </summary>
/// <param name="id">ID de la citation recherchée.</param>
/// <returns>La citation correspondante ou null si elle n'existe pas.</returns>
public async Task<Quote> getOnequote(int id)
{
var data = await getAllQuote();
var q = data.FirstOrDefault(p => p.Id == id);
if (q != null)
{
return q;
}
return null;
}
/// <summary>
/// Recherche des citations selon des critères spécifiques.
/// </summary>
/// <param name="reserch">Terme de recherche.</param>
/// <param name="argument">Liste d'arguments pour affiner la recherche.</param>
/// <returns>Une liste de citations correspondant aux critères de recherche.</returns>
public async Task<List<Quote>> reserchQuote(string reserch, List<string> argument)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère toutes les citations invalides.
/// </summary>
/// <returns>Une liste de citations non validées.</returns>
public async Task<List<Quote>> getAllQuoteInvalid()
{
var quotes = await getAllQuote();
@ -104,6 +148,12 @@ namespace WF_WebAdmin.Service;
return quotes;
}
/// <summary>
/// Récupère une liste paginée de citations invalides.
/// </summary>
/// <param name="nb">Nombre de citations par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Une liste de citations non validées correspondant à la page demandée.</returns>
public async Task<List<Quote>> getSomeQuoteInvalid(int nb, int page)
{
var quotes = await getAllQuoteInvalid();
@ -118,12 +168,20 @@ namespace WF_WebAdmin.Service;
return quotes.GetRange((page - 1) * nb, nb);
}
/// <summary>
/// Récupère le nombre total de citations enregistrées.
/// </summary>
/// <returns>Nombre total de citations.</returns>
public async Task<int> getNbQuote()
{
var data = await getAllQuote();
return data.Count;
}
/// <summary>
/// Récupère la liste des personnages depuis le fichier JSON.
/// </summary>
/// <returns>Une liste de personnages.</returns>
public async Task<List<Character>> getChar()
{
if (!File.Exists(_char))
@ -136,6 +194,10 @@ namespace WF_WebAdmin.Service;
return JsonSerializer.Deserialize<List<Character>>(json) ?? new List<Character>();
}
/// <summary>
/// Récupère la liste des sources depuis le fichier JSON.
/// </summary>
/// <returns>Une liste de sources.</returns>
public async Task<List<Source>> getSrc()
{
if (!File.Exists(_src))
@ -148,4 +210,3 @@ namespace WF_WebAdmin.Service;
return JsonSerializer.Deserialize<List<Source>>(json) ?? new List<Source>();
}
}

@ -3,17 +3,27 @@ using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service;
/// <summary>
/// Service de gestion des utilisateurs utilisant un fichier JSON comme stockage.
/// </summary>
public class UserServiceStub : IUserService
{
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_users.json");
/// <summary>
/// Sauvegarde la liste des utilisateurs dans le fichier JSON.
/// </summary>
/// <param name="users">Liste des utilisateurs à sauvegarder.</param>
public async Task saveUsersJson(List<User> users)
{
var json = JsonSerializer.Serialize(users, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(_jsonFilePath, json);
}
/// <summary>
/// Supprime un utilisateur de la liste et met à jour le fichier JSON.
/// </summary>
/// <param name="user">Utilisateur à supprimer.</param>
public async Task removeUser(User user)
{
var data = await getAllUser();
@ -25,18 +35,30 @@ public class UserServiceStub : IUserService
}
}
/// <summary>
/// Met à jour le rôle d'un utilisateur pour le passer en administrateur.
/// </summary>
/// <param name="user">Utilisateur à promouvoir.</param>
public Task updateRole(User user)
{
user.IsAdmin = true;
return updateUser(user);
}
/// <summary>
/// Rétrograde un administrateur en utilisateur normal.
/// </summary>
/// <param name="user">Utilisateur à rétrograder.</param>
public Task downgradeRole(User user)
{
user.IsAdmin = false;
return updateUser(user);
}
/// <summary>
/// Récupère tous les utilisateurs stockés dans le fichier JSON.
/// </summary>
/// <returns>Une liste d'utilisateurs.</returns>
public async Task<List<User>> getAllUser()
{
if (!File.Exists(_jsonFilePath))
@ -49,6 +71,12 @@ public class UserServiceStub : IUserService
return JsonSerializer.Deserialize<List<User>>(json) ?? new List<User>();
}
/// <summary>
/// Récupère une liste paginée d'utilisateurs.
/// </summary>
/// <param name="nb">Nombre d'utilisateurs par page.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Une liste d'utilisateurs correspondant à la page demandée.</returns>
public async Task<List<User>> getSomeUser(int nb, int page)
{
var users = await getAllUser();
@ -59,28 +87,43 @@ public class UserServiceStub : IUserService
return users.GetRange((page - 1) * nb, nb);
}
/// <summary>
/// Récupère un utilisateur spécifique en fonction de son ID.
/// </summary>
/// <param name="id">ID de l'utilisateur recherché.</param>
/// <returns>L'utilisateur correspondant à l'ID ou null s'il n'existe pas.</returns>
public async Task<User> getOneUser(int id)
{
var data = await getAllUser();
var u = data.FirstOrDefault(p => p.Id == id);
if (u != null)
{
return u;
}
return null;
}
/// <summary>
/// Recherche des utilisateurs selon des critères spécifiques.
/// </summary>
/// <param name="reserch">Terme de recherche.</param>
/// <param name="args">Liste des arguments supplémentaires pour affiner la recherche.</param>
/// <returns>Une liste d'utilisateurs correspondant aux critères de recherche.</returns>
public Task<List<User>> reserchUsers(string reserch, List<string> args)
{
throw new NotImplementedException();
}
/// <summary>
/// Récupère le nombre total d'utilisateurs enregistrés.
/// </summary>
/// <returns>Nombre total d'utilisateurs.</returns>
public async Task<int> getNbUser()
{
var data = await getAllUser();
return data.Count;
}
/// <summary>
/// Met à jour les informations d'un utilisateur existant.
/// </summary>
/// <param name="user">Utilisateur avec les nouvelles informations.</param>
public async Task updateUser(User user)
{
var data = await getAllUser();

Loading…
Cancel
Save