From 72fb708ffd68f7dd6dbfa0ef9c2d5b0c1db8e769 Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:44:13 +0100 Subject: [PATCH] refactor: #93 implement methods for managing titles in DbTitreRepository and LocalTitreRepository --- .../ITtitreRepository.cs | 14 ++-- Webzine.Repository/DbTitreRepository.cs | 65 +++++++++++++++ Webzine.Repository/LocalTitreRepository.cs | 83 +++++++++++++++++++ 3 files changed, 155 insertions(+), 7 deletions(-) diff --git a/Webzine.Repository.Contracts/ITtitreRepository.cs b/Webzine.Repository.Contracts/ITtitreRepository.cs index c7e9fc1..4dcd430 100644 --- a/Webzine.Repository.Contracts/ITtitreRepository.cs +++ b/Webzine.Repository.Contracts/ITtitreRepository.cs @@ -4,26 +4,26 @@ namespace Webzine.Repository.Contracts { public interface ITitreRepository { - // void Add(Titre titre); + void Add(Titre titre); - // int Count(); + int Count(); - // void Delete(Titre titre); + void Delete(Titre titre); Titre? Find(int idTitre); - // IEnumerable FindTitres(int offset, int limit); + IEnumerable FindTitres(int offset, int limit); IEnumerable FindAll(); - // void IncrementNbLectures(Titre titre); + void IncrementNbLectures(Titre titre); - // void IncrementNbLikes(Titre titre); + void IncrementNbLikes(Titre titre); IEnumerable Search(string mot); IEnumerable SearchByStyle(string libelle); - // void Update(Titre titre); + void Update(Titre titre); } } diff --git a/Webzine.Repository/DbTitreRepository.cs b/Webzine.Repository/DbTitreRepository.cs index 93ca2e6..df9d069 100644 --- a/Webzine.Repository/DbTitreRepository.cs +++ b/Webzine.Repository/DbTitreRepository.cs @@ -21,6 +21,71 @@ public class DbTitreRepository : ITitreRepository this.logger.LogDebug(1, "NLog injected into DbTitreRepository"); } + /// + /// Ajoute un titre à la base de données. + /// + /// L'objet titre à ajouter. + public void Add(Titre titre) + { + throw new NotImplementedException(); + } + + /// + /// Remonte le nombre de titres. + /// + /// Le nombre total de titres présents dans la base de données après l'incrémentation du nombre de lectures. + public int Count() + { + throw new NotImplementedException(); + } + + /// + /// Supprime un titre de la base de données. + /// + /// L'objet titre à supprimer. + public void Delete(Titre titre) + { + throw new NotImplementedException(); + } + + /// + /// Recherche les titres dans la base de données en fonction de l'offset et de la limite spécifiés, permettant ainsi une pagination des résultats. + /// + /// L'offset à partir duquel commencer la recherche des titres. + /// Le nombre maximum de titres à retourner dans les résultats de la recherche. + /// Une collection de titres correspondant au critère de recherche, triée par libellé. + public IEnumerable FindTitres(int offset, int limit) + { + throw new NotImplementedException(); + } + + /// + /// Incrémente le nombre de lectures d'un titre dans la base de données. + /// + /// L'objet titre pour lequel le nombre de lectures doit être incrémenté. + public void IncrementNbLectures(Titre titre) + { + throw new NotImplementedException(); + } + + /// + /// Incrémente le nombre de likes d'un titre dans la base de données. + /// + /// L'objet titre pour lequel le nombre de likes doit être incrémenté. + public void IncrementNbLikes(Titre titre) + { + throw new NotImplementedException(); + } + + /// + /// Met à jour les informations d'un titre dans la base de données en fonction de son identifiant. + /// + /// L'objet titre à mettre à jour. + public void Update(Titre titre) + { + throw new NotImplementedException(); + } + /// /// Recherche les titres dont le libellé contient le mot spécifié, en ignorant la casse. /// diff --git a/Webzine.Repository/LocalTitreRepository.cs b/Webzine.Repository/LocalTitreRepository.cs index 2d09a58..acc4602 100644 --- a/Webzine.Repository/LocalTitreRepository.cs +++ b/Webzine.Repository/LocalTitreRepository.cs @@ -24,6 +24,73 @@ public class LocalTitreRepository : ITitreRepository this.logger.LogDebug(1, "NLog injected into LocalTitreRepository"); } + /// + /// Ajoute un titre à la liste des titres. + /// + /// L'objet titre à ajouter. + public void Add(Titre titre) + { + this.titres.Add(titre); + } + + /// + /// Remonte le nombre de titres. + /// + /// Le nombre total de titres présents dans la liste après l'incrémentation du nombre de lectures. + public int Count() + { + return this.titres.Count; + } + + /// + /// Supprime un titre de la liste des titres. + /// + /// L'objet titre à supprimer. + public void Delete(Titre titre) + { + if (!this.titres.Contains(titre)) + { + this.logger.LogWarning("Le titre avec l'identifiant {IdTitre} n'existe pas dans la liste.", titre.IdTitre); + } + + this.titres.Remove(titre); + } + + /// + /// Recherche les titres dans la liste des titres en fonction de l'offset et de la limite spécifiés, permettant ainsi une pagination des résultats. + /// + /// Le nombre de titres à ignorer avant de commencer à retourner les résultats. + /// Le nombre maximum de titres à retourner. + /// Une collection de titres correspondant au critère de pagination, triée par libellé. + public IEnumerable FindTitres(int offset, int limit) + { + if (offset < 0 || limit <= 0) + { + this.logger.LogWarning("FindTitres called with invalid offset {Offset} or limit {Limit}.", offset, limit); + return Enumerable.Empty(); + } + + return this.titres.Skip(offset).Take(limit).ToList(); + } + + /// + /// Incrémente le nombre de lectures d'un titre donné. Si le titre est null, un message d'avertissement est enregistré dans les logs et aucune action n'est effectuée. + /// + /// L'objet titre dont le nombre de lectures doit être incrémenté. + public void IncrementNbLectures(Titre titre) + { + titre.NbLectures++; + } + + /// + /// Incrémente le nombre de likes d'un titre donné. Si le titre est null, un message d'avertissement est enregistré dans les logs et aucune action n'est effectuée. + /// + /// L'objet titre dont le nombre de likes doit être incrémenté. + public void IncrementNbLikes(Titre titre) + { + titre.NbLikes++; + } + /// /// Recherche les titres dont le libellé contient le mot spécifié, en ignorant la casse. /// @@ -103,4 +170,20 @@ public class LocalTitreRepository : ITitreRepository return list; } + + /// + /// Met à jour un titre dans la liste des titres en fonction de son identifiant. Si aucun titre correspondant à l'identifiant du titre fourni n'est trouvé, un message d'avertissement est enregistré dans les logs et aucune mise à jour n'est effectuée. + /// + /// L'objet titre à mettre à jour. + public void Update(Titre titre) + { + int index = this.titres.FindIndex(t => t.IdTitre == titre.IdTitre); + + if (index == -1) + { + this.logger.LogWarning("Aucun titre trouvé avec l'identifiant {IdTitre}.", titre.IdTitre); + } + + this.titres[index] = titre; + } } \ No newline at end of file