doc sur Service

Service
parent f4b6c6bfe1
commit 60183a2d3a

@ -2,25 +2,66 @@ using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service namespace WF_WebAdmin.Service
{ {
/// <summary>
/// Interface définissant les opérations de gestion des quiz.
/// </summary>
public interface IQuizService public interface IQuizService
{ {
/// <summary>
/// Ajoute un quiz.
/// </summary>
/// <param name="quiz">Quiz à ajouter.</param>
public Task addQuiz(Quiz quiz); public Task addQuiz(Quiz quiz);
/// <summary>
/// Met à jour un quiz existant.
/// </summary>
/// <param name="quiz">Quiz à mettre à jour.</param>
public Task updateQuiz(Quiz quiz); 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); 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); 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(); 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(); 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); 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); 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(); public Task<int> getNbQuiz();
} }
} }

@ -2,32 +2,94 @@
namespace WF_WebAdmin.Service namespace WF_WebAdmin.Service
{ {
/// <summary>
/// Interface définissant les opérations de gestion des citations.
/// </summary>
public interface IQuoteService public interface IQuoteService
{ {
/// <summary>
/// Ajoute une citation.
/// </summary>
/// <param name="quote">Citation à ajouter.</param>
public Task addQuote(Quote quote); public Task addQuote(Quote quote);
/// <summary>
/// Supprime une citation.
/// </summary>
/// <param name="quote">Citation à supprimer.</param>
public Task removeQuote(Quote quote); public Task removeQuote(Quote quote);
/// <summary>
/// Valide une citation.
/// </summary>
/// <param name="quote">Citation à valider.</param>
public Task validQuote(Quote quote); public Task validQuote(Quote quote);
/// <summary>
/// Met à jour une citation existante.
/// </summary>
/// <param name="quote">Citation à mettre à jour.</param>
public Task updateQuote(Quote quote); 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(); 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); 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); 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); 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(); 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); 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(); 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(); 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(); public Task<List<Source>> getSrc();
} }
} }

@ -2,24 +2,68 @@
namespace WF_WebAdmin.Service namespace WF_WebAdmin.Service
{ {
/// <summary>
/// Interface définissant les opérations de gestion des utilisateurs.
/// </summary>
public interface IUserService public interface IUserService
{ {
/// <summary>
/// Supprime un utilisateur du système.
/// </summary>
/// <param name="user">Utilisateur à supprimer.</param>
public Task removeUser(User user); 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); 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); 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); 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(); 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); 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); 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); 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(); public Task<int> getNbUser();
} }
} }

@ -1,106 +1,153 @@
using System.Text.Json; using System.Text.Json;
using WF_WebAdmin.Model; using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service;
public class QuizServiceStub: IQuizService
{
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_quiz.json");
public async Task saveQuizJson(List<Quiz> quizzes)
{
var json = JsonSerializer.Serialize(quizzes, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(_jsonFilePath, json);
}
public async Task addQuiz(Quiz quiz) namespace WF_WebAdmin.Service
{
/// <summary>
/// Service de gestion des quiz utilisant un fichier JSON comme stockage de données.
/// </summary>
public class QuizServiceStub : IQuizService
{ {
var data = await getQuizzes(); private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_quiz.json");
quiz.Id = data.Count > 0 ? data.Max(p => p.Id) + 1 : 1;
data.Add(quiz);
await saveQuizJson(data);
}
public async Task updateQuiz(Quiz quiz) /// <summary>
{ /// Sauvegarde la liste des quiz dans un fichier JSON.
var data = await getQuizzes(); /// </summary>
var existingQuiz = data.FirstOrDefault(q => q.Id == quiz.Id); /// <param name="quizzes">Liste des quiz à sauvegarder.</param>
if (existingQuiz != null) public async Task saveQuizJson(List<Quiz> quizzes)
{ {
existingQuiz.Question = quiz.Question; var json = JsonSerializer.Serialize(quizzes, new JsonSerializerOptions { WriteIndented = true });
existingQuiz.AnswerA = quiz.AnswerA; await File.WriteAllTextAsync(_jsonFilePath, json);
existingQuiz.AnswerB = quiz.AnswerB;
existingQuiz.AnswerC = quiz.AnswerC;
existingQuiz.AnswerD = quiz.AnswerD;
existingQuiz.CAnswer = quiz.CAnswer;
existingQuiz.IsValid = quiz.IsValid;
existingQuiz.UserProposition = quiz.UserProposition;
await saveQuizJson(data);
} }
}
public async Task removeQuiz(int id) /// <summary>
{ /// Ajoute un quiz à la liste et le sauvegarde dans le fichier JSON.
var data = await getQuizzes(); /// </summary>
var quiz = data.FirstOrDefault(q => q.Id == id); /// <param name="quiz">Quiz à ajouter.</param>
if (quiz != null) public async Task addQuiz(Quiz quiz)
{ {
data.Remove(quiz); var data = await getQuizzes();
await saveQuizJson(data); quiz.Id = data.Count > 0 ? data.Max(p => p.Id) + 1 : 1;
data.Add(quiz);
await saveQuizJson(data);
} }
}
public Task validateQuiz(int id) /// <summary>
{ /// Met à jour un quiz existant dans la liste et le sauvegarde.
throw new NotImplementedException(); /// </summary>
} /// <param name="quiz">Quiz mis à jour.</param>
public async Task updateQuiz(Quiz quiz)
{
var data = await getQuizzes();
var existingQuiz = data.FirstOrDefault(q => q.Id == quiz.Id);
if (existingQuiz != null)
{
existingQuiz.Question = quiz.Question;
existingQuiz.AnswerA = quiz.AnswerA;
existingQuiz.AnswerB = quiz.AnswerB;
existingQuiz.AnswerC = quiz.AnswerC;
existingQuiz.AnswerD = quiz.AnswerD;
existingQuiz.CAnswer = quiz.CAnswer;
existingQuiz.IsValid = quiz.IsValid;
existingQuiz.UserProposition = quiz.UserProposition;
await saveQuizJson(data);
}
}
public async Task<List<Quiz>> getQuizzes() /// <summary>
{ /// Supprime un quiz de la liste et met à jour le fichier JSON.
if (!File.Exists(_jsonFilePath)) /// </summary>
{ /// <param name="id">Identifiant du quiz à supprimer.</param>
Console.Out.WriteLine($"{_jsonFilePath} not found"); public async Task removeQuiz(int id)
return new List<Quiz>(); {
} var data = await getQuizzes();
var quiz = data.FirstOrDefault(q => q.Id == id);
var json = await File.ReadAllTextAsync(_jsonFilePath); if (quiz != null)
return JsonSerializer.Deserialize<List<Quiz>>(json) ?? new List<Quiz>(); {
} data.Remove(quiz);
await saveQuizJson(data);
}
}
public async Task<List<Quiz>> getQuizzesToValidate() /// <summary>
{ /// Valide un quiz (non implémenté).
var quizzes = await getQuizzes(); /// </summary>
return quizzes.Where(quiz => quiz.IsValid == false).ToList(); /// <param name="id">Identifiant du quiz à valider.</param>
} public Task validateQuiz(int id)
{
throw new NotImplementedException();
}
public async Task<Quiz> getQuiz(int id) /// <summary>
{ /// Récupère la liste complète des quiz à partir du fichier JSON.
var data = await getQuizzes(); /// </summary>
var q = data.FirstOrDefault(p => p.Id == id); /// <returns>Liste des quiz.</returns>
if (q != null) public async Task<List<Quiz>> getQuizzes()
{ {
return q; if (!File.Exists(_jsonFilePath))
{
Console.Out.WriteLine($"{_jsonFilePath} not found");
return new List<Quiz>();
}
var json = await File.ReadAllTextAsync(_jsonFilePath);
return JsonSerializer.Deserialize<List<Quiz>>(json) ?? new List<Quiz>();
} }
return null;
}
public async Task<List<Quiz>> getSommeQuiz(int nb, int page) /// <summary>
{ /// Récupère la liste des quiz non validés.
var data = await getQuizzes(); /// </summary>
if ((page - 1) * nb + nb > data.Count()) /// <returns>Liste des quiz en attente de validation.</returns>
public async Task<List<Quiz>> getQuizzesToValidate()
{ {
if(nb > data.Count()) 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();
var q = data.FirstOrDefault(p => p.Id == id);
if (q != null)
{ {
return data.GetRange(0, data.Count()-1); return q;
} }
return data.GetRange(data.Count() - nb, nb); return null;
} }
return data.GetRange((page - 1) * nb, nb);
}
public async Task<int> getNbQuiz() /// <summary>
{ /// Récupère une liste paginée de quiz.
var data = await getQuizzes(); /// </summary>
return data.Count; /// <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())
{
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 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"; 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) public async Task<QuoteDTO> AddQuoteAsync(Quote quote)
{ {
QuoteExtension extension = new QuoteExtension(); QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote); QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
// Utilisation de NpgsqlConnection pour PostgreSQL
using (var connection = new NpgsqlConnection(_connectionString)) 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) " + 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)"; "VALUES (@content, @langue, @reason, @source, @character, @user, @img_path)";
// Créer une commande Npgsql
var command = new NpgsqlCommand(commandText, connection); var command = new NpgsqlCommand(commandText, connection);
/* /*
// Ajouter des paramètres à la commande // Ajouter des paramètres à la commande
command.Parameters.AddWithValue("@content", quote.Content); command.Parameters.AddWithValue("@content", quote.Content);
@ -38,33 +39,29 @@ namespace WF_WebAdmin.Service
command.Parameters.AddWithValue("@img_path", quote.ImgPath); command.Parameters.AddWithValue("@img_path", quote.ImgPath);
*/ */
try try
{ {
// Ouvrir la connexion à la base de données
await connection.OpenAsync(); await connection.OpenAsync();
// Exécuter la commande d'insertion
await command.ExecuteNonQueryAsync(); await command.ExecuteNonQueryAsync();
} }
catch (Exception ex) 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}"); Console.WriteLine($"Une erreur est survenue lors de l'ajout de la citation : {ex.Message}");
} }
finally finally
{ {
// Fermer la connexion (automatiquement géré avec `using`, mais ajouté pour explicitement montrer le processus)
await connection.CloseAsync(); await connection.CloseAsync();
} }
} }
// Retourner l'objet DTO pour que vous puissiez l'utiliser ailleurs dans votre application
return quoteDTO; return quoteDTO;
} }
/// <summary>
public Task RemoveQuote(Quote quote) /// 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(); QuoteExtension extension = new QuoteExtension();
QuoteDTO quoteDTO = extension.QuoteToDTO(quote); QuoteDTO quoteDTO = extension.QuoteToDTO(quote);
@ -72,6 +69,10 @@ namespace WF_WebAdmin.Service
return Task.FromResult(quoteDTO); return Task.FromResult(quoteDTO);
} }
/// <summary>
/// Valide une citation.
/// </summary>
/// <param name="quote">Citation à valider.</param>
public Task validQuote(Quote quote) public Task validQuote(Quote quote)
{ {
QuoteExtension extension = new QuoteExtension(); QuoteExtension extension = new QuoteExtension();
@ -80,6 +81,10 @@ namespace WF_WebAdmin.Service
return Task.FromResult(quoteDTO); return Task.FromResult(quoteDTO);
} }
/// <summary>
/// Met à jour une citation existante.
/// </summary>
/// <param name="quote">Citation mise à jour.</param>
public Task updateQuote(Quote quote) public Task updateQuote(Quote quote)
{ {
QuoteExtension extension = new QuoteExtension(); QuoteExtension extension = new QuoteExtension();
@ -88,61 +93,89 @@ namespace WF_WebAdmin.Service
return Task.FromResult(quoteDTO); return Task.FromResult(quoteDTO);
} }
/// <summary>
/// Ajoute une citation (non implémenté).
/// </summary>
public Task addQuote(Quote quote) public Task addQuote(Quote quote)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// Supprime une citation (non implémenté).
/// </summary>
public Task removeQuote(Quote quote) public Task removeQuote(Quote quote)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// Récupère toutes les citations (non implémenté).
/// </summary>
public Task<List<Quote>> getAllQuote() public Task<List<Quote>> getAllQuote()
{ {
throw new NotImplementedException(); 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) public Task<List<Quote>> getSomeQuote(int nb, int page)
{ {
throw new NotImplementedException(); 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) public Task<List<Quote>> reserchQuote(string reserch, List<string> argument)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// Récupère toutes les citations invalides (non implémenté).
/// </summary>
public Task<List<Quote>> getAllQuoteInvalid() public Task<List<Quote>> getAllQuoteInvalid()
{ {
throw new NotImplementedException(); 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) public Task<List<Quote>> getSomeQuoteInvalid(int nb, int page)
{ {
throw new NotImplementedException(); 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) public Task<Quote> getOnequote(int id)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// Récupère le nombre total de citations enregistrées (non implémenté).
/// </summary>
public Task<int> getNbQuote() public Task<int> getNbQuote()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// Récupère la liste des personnages (non implémenté).
/// </summary>
public Task<List<Character>> getChar() public Task<List<Character>> getChar()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary>
/// Récupère la liste des sources (non implémenté).
/// </summary>
public Task<List<Source>> getSrc() public Task<List<Source>> getSrc()
{ {
throw new NotImplementedException(); throw new NotImplementedException();

@ -3,149 +3,210 @@ using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service; 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 _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake-dataQuote.json");
private readonly string _char = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake-dataCaracter.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"); 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) 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();
quote.Id = data.Count > 0 ? data.Max(p => p.Id) + 1 : 1;
data.Add(quote);
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();
var q = data.FirstOrDefault(p => p.Id == quote.Id);
if (q != null)
{ {
var json = JsonSerializer.Serialize(quotes, new JsonSerializerOptions { WriteIndented = true }); data.Remove(q);
await File.WriteAllTextAsync(_jsonFilePath, json);
}
public async Task addQuote(Quote quote)
{
var data = await getAllQuote();
quote.Id = data.Count > 0 ? data.Max(p => p.Id) + 1 : 1;
data.Add(quote);
await saveQuoteJson(data); await saveQuoteJson(data);
} }
}
public async Task removeQuote(Quote quote) /// <summary>
{ /// Marque une citation comme valide.
var data = await getAllQuote(); /// </summary>
var q = data.FirstOrDefault(p => p.Id == quote.Id); /// <param name="quote">Citation à valider.</param>
if (q != null) public async Task validQuote(Quote quote)
{ {
data.Remove(q); throw new NotImplementedException();
await saveQuoteJson(data); }
}
} /// <summary>
/// Met à jour une citation existante.
public async Task validQuote(Quote quote) /// </summary>
{ /// <param name="quote">Citation mise à jour.</param>
throw new NotImplementedException(); public async Task updateQuote(Quote quote)
} {
var data = await getAllQuote();
public async Task updateQuote(Quote quote) var q = data.FirstOrDefault(p => p.Id == quote.Id);
if (q != null)
{ {
var data = await getAllQuote(); q.Content = quote.Content;
var q = data.FirstOrDefault(p => p.Id == quote.Id); q.Charac = quote.Charac;
if (q != null) q.ImgPath = quote.ImgPath;
{ q.TitleSrc = quote.TitleSrc;
q.Content = quote.Content; q.DateSrc = quote.DateSrc;
q.Charac = quote.Charac; q.Langue = quote.Langue;
q.ImgPath = quote.ImgPath; await saveQuoteJson(data);
q.TitleSrc = quote.TitleSrc;
q.DateSrc = quote.DateSrc;
q.Langue = quote.Langue;
await saveQuoteJson(data);
}
} }
}
public async Task<List<Quote>> getAllQuote() /// <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))
{ {
if (!File.Exists(_jsonFilePath)) Console.Out.WriteLine($"{_jsonFilePath} not found");
{ return new List<Quote>();
Console.Out.WriteLine($"{_jsonFilePath} not found");
return new List<Quote>();
}
var json = await File.ReadAllTextAsync(_jsonFilePath);
return JsonSerializer.Deserialize<List<Quote>>(json) ?? new List<Quote>();
} }
public async Task<List<Quote>> getSomeQuote(int nb, int page) var json = await File.ReadAllTextAsync(_jsonFilePath);
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())
{ {
var quotes = await getAllQuote(); if (nb > quotes.Count())
if((page - 1) * nb + nb > quotes.Count())
{ {
if (nb > quotes.Count()) return quotes.GetRange(0, quotes.Count());
{
return quotes.GetRange(0, quotes.Count());
}
return quotes.GetRange(quotes.Count()-nb, nb);
} }
return quotes.GetRange((page - 1) * nb, nb); return quotes.GetRange(quotes.Count() - nb, nb);
} }
return quotes.GetRange((page - 1) * nb, nb);
public async Task<Quote> getOnequote(int id) }
/// <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);
return q;
}
/// <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();
quotes = quotes.Where(q => q.IsValid == false).ToList();
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();
if ((page - 1) * nb + nb > quotes.Count())
{ {
var data = await getAllQuote(); if (nb > quotes.Count())
var q = data.FirstOrDefault(p => p.Id == id);
if (q != null)
{ {
return q; return quotes.GetRange(0, quotes.Count());
} }
return null; return quotes.GetRange(quotes.Count() - nb, nb);
}
public async Task<List<Quote>> reserchQuote(string reserch, List<string> argument)
{
throw new NotImplementedException();
} }
return quotes.GetRange((page - 1) * nb, nb);
public async Task<List<Quote>> getAllQuoteInvalid() }
{
var quotes = await getAllQuote(); /// <summary>
quotes = quotes.Where(q => q.IsValid == false).ToList(); /// Récupère le nombre total de citations enregistrées.
return quotes; /// </summary>
} /// <returns>Nombre total de citations.</returns>
public async Task<int> getNbQuote()
public async Task<List<Quote>> getSomeQuoteInvalid(int nb, int page) {
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))
{ {
var quotes = await getAllQuoteInvalid(); Console.Out.WriteLine($"{_char} not found");
if ((page - 1) * nb + nb > quotes.Count()) return new List<Character>();
{
if (nb > quotes.Count())
{
return quotes.GetRange(0, quotes.Count());
}
return quotes.GetRange(quotes.Count() - nb, nb);
}
return quotes.GetRange((page - 1) * nb, nb);
} }
public async Task<int> getNbQuote() var json = await File.ReadAllTextAsync(_char);
{ return JsonSerializer.Deserialize<List<Character>>(json) ?? new List<Character>();
var data = await getAllQuote(); }
return data.Count;
}
public async Task<List<Character>> getChar() /// <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))
{ {
if (!File.Exists(_char)) Console.Out.WriteLine($"{_src} not found");
{ return new List<Source>();
Console.Out.WriteLine($"{_char} not found");
return new List<Character>();
}
var json = await File.ReadAllTextAsync(_char);
return JsonSerializer.Deserialize<List<Character>>(json) ?? new List<Character>();
} }
public async Task<List<Source>> getSrc() var json = await File.ReadAllTextAsync(_src);
{ return JsonSerializer.Deserialize<List<Source>>(json) ?? new List<Source>();
if (!File.Exists(_src)) }
{
Console.Out.WriteLine($"{_src} not found");
return new List<Source>();
}
var json = await File.ReadAllTextAsync(_src);
return JsonSerializer.Deserialize<List<Source>>(json) ?? new List<Source>();
}
} }

@ -3,17 +3,27 @@ using WF_WebAdmin.Model;
namespace WF_WebAdmin.Service; namespace WF_WebAdmin.Service;
/// <summary>
/// Service de gestion des utilisateurs utilisant un fichier JSON comme stockage.
/// </summary>
public class UserServiceStub : IUserService public class UserServiceStub : IUserService
{ {
private readonly string _jsonFilePath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "fake_data_users.json"); 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) public async Task saveUsersJson(List<User> users)
{ {
var json = JsonSerializer.Serialize(users, new JsonSerializerOptions { WriteIndented = true }); var json = JsonSerializer.Serialize(users, new JsonSerializerOptions { WriteIndented = true });
await File.WriteAllTextAsync(_jsonFilePath, json); 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) public async Task removeUser(User user)
{ {
var data = await getAllUser(); 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) public Task updateRole(User user)
{ {
user.IsAdmin = true; user.IsAdmin = true;
return updateUser(user); return updateUser(user);
} }
/// <summary>
/// Rétrograde un administrateur en utilisateur normal.
/// </summary>
/// <param name="user">Utilisateur à rétrograder.</param>
public Task downgradeRole(User user) public Task downgradeRole(User user)
{ {
user.IsAdmin = false; user.IsAdmin = false;
return updateUser(user); 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() public async Task<List<User>> getAllUser()
{ {
if (!File.Exists(_jsonFilePath)) if (!File.Exists(_jsonFilePath))
@ -49,6 +71,12 @@ public class UserServiceStub : IUserService
return JsonSerializer.Deserialize<List<User>>(json) ?? new List<User>(); 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) public async Task<List<User>> getSomeUser(int nb, int page)
{ {
var users = await getAllUser(); var users = await getAllUser();
@ -59,39 +87,54 @@ public class UserServiceStub : IUserService
return users.GetRange((page - 1) * nb, nb); 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) public async Task<User> getOneUser(int id)
{ {
var data = await getAllUser(); var data = await getAllUser();
var u = data.FirstOrDefault(p => p.Id == id); var u = data.FirstOrDefault(p => p.Id == id);
if (u != null) return u;
{
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) public Task<List<User>> reserchUsers(string reserch, List<string> args)
{ {
throw new NotImplementedException(); 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() public async Task<int> getNbUser()
{ {
var data = await getAllUser(); var data = await getAllUser();
return data.Count; 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) public async Task updateUser(User user)
{ {
var data = await getAllUser(); var data = await getAllUser();
var person = data.FirstOrDefault(p => p.Id == user.Id); var person = data.FirstOrDefault(p => p.Id == user.Id);
if (person != null) if (person != null)
{ {
person.Name = user.Name; person.Name = user.Name;
person.Email = user.Email; person.Email = user.Email;
person.Image = user.Image; person.Image = user.Image;
person.IsAdmin = user.IsAdmin; person.IsAdmin = user.IsAdmin;
await saveUsersJson(data); await saveUsersJson(data);
} }
} }
} }

Loading…
Cancel
Save