From f732e3c2a55ba9ee6877652e4031709bfb20061a Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 6 Mar 2026 10:10:42 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Ajoutez=20des=20commentaires=20de=20doc?= =?UTF-8?q?umentation=20XML=20=C3=A0=20divers=20mod=C3=A8les=20et=20contr?= =?UTF-8?q?=C3=B4leurs=20pour=20une=20meilleure=20clart=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Webzine.Entity/Artiste.cs | 12 +++++ Webzine.Entity/Commentaire.cs | 18 ++++++++ Webzine.Entity/Fixtures/ArtisteFactory.cs | 5 +- Webzine.Entity/Fixtures/DataFactory.cs | 6 +++ Webzine.Entity/Style.cs | 9 ++++ Webzine.Entity/Titre.cs | 46 +++++++++++++++++++ Webzine.Repository/Fake/TitreFactory.cs | 13 ++++++ Webzine.Repository/LocalEntityRepository.cs | 6 +++ .../Controllers/CommentairesController.cs | 20 ++++++-- .../Controllers/TitreController.cs | 36 +++++++++++++++ .../Accueil/AccueilIndexViewModel.cs | 1 - .../Administration/ViewModels/ArtisteModel.cs | 1 - .../Commentaire/CommentaireDeleteViewModel.cs | 18 ++++++++ .../Commentaire/CommentaireViewModel.cs | 4 -- .../ViewModels/CommentaireViewModel.cs | 19 -------- .../ViewModels/Titre/AdminTitreDelete.cs | 12 +++++ .../ViewModels/Titre/AdminTitreForm.cs | 45 ++++++++++++++++++ .../ViewModels/Titre/AdminTitreList.cs | 27 +++++++++++ .../Administration/Views/Titre/Index.cshtml | 15 +----- .../Controllers/AccueilController.cs | 11 ++++- .../Controllers/ApiController.cs | 12 +++++ .../Controllers/ArtisteController.cs | 9 +++- .../Controllers/ContactController.cs | 17 +++++++ .../Controllers/TitreController.cs | 1 + .../Accueil/AccueilIndexViewModel.cs | 12 ++++- .../ViewModels/ArtisteModel.cs | 5 +- .../ViewModels/Titre/TitreComment.cs | 12 +++++ .../ViewModels/Titre/TitreContent.cs | 33 +++++++++++++ .../ViewModels/Titre/TitreDetail.cs | 10 ++++ .../ViewModels/Titre/TitreLike.cs | 6 +++ .../ViewModels/Titre/TitreStyle.cs | 9 ++++ .../ViewModels/Titre/TitreStyleItem.cs | 15 ++++++ 32 files changed, 415 insertions(+), 50 deletions(-) delete mode 100644 Webzine.WebApplication/Areas/Administration/ViewModels/Accueil/AccueilIndexViewModel.cs delete mode 100644 Webzine.WebApplication/Areas/Administration/ViewModels/ArtisteModel.cs delete mode 100644 Webzine.WebApplication/Areas/Administration/ViewModels/CommentaireViewModel.cs diff --git a/Webzine.Entity/Artiste.cs b/Webzine.Entity/Artiste.cs index 257fe56..6db6bc0 100644 --- a/Webzine.Entity/Artiste.cs +++ b/Webzine.Entity/Artiste.cs @@ -12,16 +12,28 @@ namespace Webzine.Entity /// public class Artiste { + /// + /// Identifiant unique de l'artiste. + /// public int IdArtiste { get; set; } + /// + /// Nom de l'artiste. Doit être compris entre 2 et 50 caractères et est obligatoire. + /// [Required] [MinLength(2)] [MaxLength(50)] [Display(Name = "Nom de l'artiste")] public string Nom { get; set; } + /// + /// Biographie de l'artiste, qui peut contenir une description de sa carrière, de son style musical, etc. Doit être compris entre 10 et 4000 caractères et est obligatoire. + /// public string Biographie { get; set; } + /// + /// Date de création de l'artiste. Représente la date à laquelle l'artiste a été ajouté à la base de données. Doit être une date valide et est obligatoire. + /// public List Titres { get; set; } } } diff --git a/Webzine.Entity/Commentaire.cs b/Webzine.Entity/Commentaire.cs index 36530b6..baaa852 100644 --- a/Webzine.Entity/Commentaire.cs +++ b/Webzine.Entity/Commentaire.cs @@ -11,26 +11,44 @@ namespace Webzine.Entity /// public class Commentaire { + /// + /// Identifiant unique du commentaire. + /// public int IdCommentaire { get; set; } + /// + /// Contenu du commentaire laissé par l'utilisateur. Doit être compris entre 10 et 1000 caractères et est obligatoire. + /// [Required] [MinLength(10)] [MaxLength(1000)] [Display(Name = "Commentaire")] public string Contenu { get; set; } + /// + /// Nom de l'auteur du commentaire. Doit être compris entre 2 et 30 caractères et est obligatoire. + /// [Required] [MinLength(2)] [MaxLength(30)] [Display(Name = "Nom")] public string Auteur { get; set; } + /// + /// Date de création du commentaire. Représente la date à laquelle le commentaire a été laissé par l'utilisateur. Doit être une date valide et est obligatoire. + /// [Required] [Display(Name = "Date de création")] public DateTime DateCreation { get; set; } + /// + /// Identifiant du titre associé à ce commentaire. Clé étrangère vers l'entité . + /// public int IdTitre { get; set; } + /// + /// Référence au titre associé à ce commentaire. Permet d'accéder aux informations du titre à partir du commentaire. + /// public Titre Titre { get; set; } } } diff --git a/Webzine.Entity/Fixtures/ArtisteFactory.cs b/Webzine.Entity/Fixtures/ArtisteFactory.cs index e9af87b..d8ecb26 100644 --- a/Webzine.Entity/Fixtures/ArtisteFactory.cs +++ b/Webzine.Entity/Fixtures/ArtisteFactory.cs @@ -4,15 +4,14 @@ namespace Webzine.Entity.Fixtures { /// /// Factory pour générer des artistes avec des titres associés, à l'aide de la bibliothèque Bogus. - /// /// public class ArtisteFactory { /// /// Récupère un artiste par son nom, en générant des données fictives pour ses titres associés. /// - /// - /// + /// Le nom de l'artiste à générer. + /// Un objet Artiste avec des titres associés générés de manière aléatoire. public static Artiste SeedArtisteByName(string nom) { // On définit nos albums "bouchonnés" diff --git a/Webzine.Entity/Fixtures/DataFactory.cs b/Webzine.Entity/Fixtures/DataFactory.cs index 5199a8a..8b6617d 100644 --- a/Webzine.Entity/Fixtures/DataFactory.cs +++ b/Webzine.Entity/Fixtures/DataFactory.cs @@ -57,6 +57,11 @@ public class DataFactory "https://img.youtube.com/vi/1fjA68k8DAU/maxresdefault.jpg") }, }; + /// + /// Génère une liste d'artistes de musique en utilisant la bibliothèque Faker pour créer des noms d'artistes et des biographies réalistes. + /// + /// Nombre d'artistes à générer + /// Liste d'artistes de musique générés public List GenerateArtists(int count) { var artists = new List(); @@ -103,6 +108,7 @@ public class DataFactory /// /// Nombre de titres à générer /// Liste des artistes à associer aux titres générés + /// Liste des styles à associer aux titres générés /// Liste de titres de musique générés public List GenerateTitres(int count, List artists, List \ No newline at end of file + \ No newline at end of file diff --git a/Webzine.WebApplication/Controllers/AccueilController.cs b/Webzine.WebApplication/Controllers/AccueilController.cs index 7e18194..354f1f3 100644 --- a/Webzine.WebApplication/Controllers/AccueilController.cs +++ b/Webzine.WebApplication/Controllers/AccueilController.cs @@ -10,13 +10,22 @@ namespace Webzine.WebApplication.Controllers private readonly ILogger _logger; private readonly IConfiguration _configuration; + /// + /// Initializes a new instance of the class. + /// + /// Service de journalisation injecté pour enregistrer les événements et les erreurs. + /// Service d'injection de configuration pour accéder aux paramètres de l'application. public AccueilController(ILogger logger, IConfiguration configuration) { _logger = logger; _configuration = configuration; + this._logger.LogDebug(1, "NLog injected into AccueilController"); } - // GET: AccueilController + /// + /// Affiche la page d'accueil du webzine, présentant les derniers titres et les titres les plus populaires. + /// + /// La vue Index avec le ViewModel contenant les listes de titres à afficher. public ActionResult Index() { _logger.LogInformation("Arrivée sur la page d'accueil"); diff --git a/Webzine.WebApplication/Controllers/ApiController.cs b/Webzine.WebApplication/Controllers/ApiController.cs index 39e8825..40e6ba2 100644 --- a/Webzine.WebApplication/Controllers/ApiController.cs +++ b/Webzine.WebApplication/Controllers/ApiController.cs @@ -6,18 +6,30 @@ public class ApiController : ControllerBase { private readonly ILogger _logger; + /// + /// Initializes a new instance of the class. + /// + /// Service de journalisation injecté pour enregistrer les événements et les erreurs. public ApiController(ILogger logger) { this._logger = logger; this._logger.LogDebug(1, "NLog injected into VersionController"); } + /// + /// Endpoint de test pour vérifier que l'API fonctionne correctement. Retourne une chaîne de caractères "Hello World !". + /// + /// Une chaîne de caractères "Hello World !". [HttpGet] public string HelloWorld() { return "Hello World !"; } + /// + /// Endpoint de test pour vérifier que l'API fonctionne correctement. Retourne un objet JSON contenant le nom et la version de l'application. + /// + /// Un objet JSON avec les propriétés "nom" et "version". [HttpGet] public IActionResult Version() { diff --git a/Webzine.WebApplication/Controllers/ArtisteController.cs b/Webzine.WebApplication/Controllers/ArtisteController.cs index 0f5b91a..08df8f6 100644 --- a/Webzine.WebApplication/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Controllers/ArtisteController.cs @@ -9,16 +9,21 @@ namespace Webzine.WebApplication.Controllers // Injection du logger via le constructeur private readonly ILogger _logger; + /// + /// Initializes a new instance of the class. + /// + /// Service de journalisation injecté pour enregistrer les événements et les erreurs. public ArtisteController(ILogger logger) { _logger = logger; + this._logger.LogDebug(1, "NLog injected into ArtisteController"); } /// /// Prend en paramètre le nom de l'artiste (ex: "fatal-bazooka"), utilise la factory pour trouver l'artiste correspondant, et affiche sa page dédiée. /// - /// - /// + /// Le nom de l'artiste à rechercher, formaté en kebab-case (ex: "fatal-bazooka"). + /// La vue de l'artiste avec son ViewModel, ou une redirection vers l'accueil si le nom est vide, ou une erreur 404 si l'artiste n'est pas trouvé. [HttpGet("/artiste/{nom}")] public IActionResult Index(string nom) { diff --git a/Webzine.WebApplication/Controllers/ContactController.cs b/Webzine.WebApplication/Controllers/ContactController.cs index 557e1fb..2aa8c32 100644 --- a/Webzine.WebApplication/Controllers/ContactController.cs +++ b/Webzine.WebApplication/Controllers/ContactController.cs @@ -7,6 +7,23 @@ namespace Webzine.WebApplication.Controllers /// public class ContactController : Controller { + // Injection du logger via le constructeur + private readonly ILogger _logger; + + /// + /// Initializes a new instance of the class. + /// + /// Service de journalisation injecté pour enregistrer les événements et les erreurs. + public ContactController(ILogger logger) + { + _logger = logger; + this._logger.LogDebug(1, "NLog injected into ContactController"); + } + + /// + /// Affiche la page de contact du webzine. + /// + /// La vue Index de la page de contact. public IActionResult Index() { return View(); diff --git a/Webzine.WebApplication/Controllers/TitreController.cs b/Webzine.WebApplication/Controllers/TitreController.cs index b89c757..3cfdfbd 100644 --- a/Webzine.WebApplication/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Controllers/TitreController.cs @@ -19,6 +19,7 @@ public class TitreController : Controller private readonly List _artistes; /// + /// Initializes a new instance of the class. /// Initialise une nouvelle instance du . /// Les données sont générées dynamiquement via . /// diff --git a/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs b/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs index 8a163d1..fa29cd2 100644 --- a/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs +++ b/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs @@ -1,10 +1,20 @@ -using Webzine.Entity; +using Webzine.Entity; namespace Webzine.WebApplication.ViewModels.Accueil { + /// + /// ViewModel pour la page d'accueil du webzine, affichant les derniers titres et les titres les plus populaires. + /// public class AccueilIndexViewModel { + /// + /// Définit la liste des derniers titres ajoutés au webzine. + /// public List DerniersTitres { get; set; } = []; + + /// + /// Définit la liste des titres les plus populaires du webzine. + /// public List TopTitres { get; set; } = []; } } \ No newline at end of file diff --git a/Webzine.WebApplication/ViewModels/ArtisteModel.cs b/Webzine.WebApplication/ViewModels/ArtisteModel.cs index c362cd9..426af29 100644 --- a/Webzine.WebApplication/ViewModels/ArtisteModel.cs +++ b/Webzine.WebApplication/ViewModels/ArtisteModel.cs @@ -1,7 +1,10 @@ -using Webzine.Entity; +using Webzine.Entity; namespace Webzine.WebApplication.ViewModels { + /// + /// ViewModel pour afficher les détails d'un artiste, incluant les informations de l'artiste et la liste de ses titres. + /// public class ArtisteModel { /// diff --git a/Webzine.WebApplication/ViewModels/Titre/TitreComment.cs b/Webzine.WebApplication/ViewModels/Titre/TitreComment.cs index da0dc16..1281c77 100644 --- a/Webzine.WebApplication/ViewModels/Titre/TitreComment.cs +++ b/Webzine.WebApplication/ViewModels/Titre/TitreComment.cs @@ -2,16 +2,28 @@ using System.ComponentModel.DataAnnotations; namespace Webzine.WebApplication.ViewModels.Titre; +/// +/// Classe représentant un commentaire sur un titre, utilisée pour la validation des données lors de la soumission d'un commentaire. +/// public class TitreComment { + /// + /// Définit l'identifiant du titre auquel le commentaire est associé. + /// [Required] public int IdTitre { get; set; } + /// + /// Définit le nom de l'auteur du commentaire. + /// [Required] [MinLength(2)] [MaxLength(30)] public string Auteur { get; set; } + /// + /// Définit le contenu du commentaire. + /// [Required] [MinLength(10)] [MaxLength(1000)] diff --git a/Webzine.WebApplication/ViewModels/Titre/TitreContent.cs b/Webzine.WebApplication/ViewModels/Titre/TitreContent.cs index b1ee798..7c49ce4 100644 --- a/Webzine.WebApplication/ViewModels/Titre/TitreContent.cs +++ b/Webzine.WebApplication/ViewModels/Titre/TitreContent.cs @@ -2,25 +2,58 @@ using Webzine.Entity; namespace Webzine.WebApplication.ViewModels.Titre; +/// +/// Contient les détails d'un titre, ainsi que les commentaires associés. +/// public class TitreContent { + /// + /// Définit l'identifiant du titre. + /// public int IdTitre { get; set; } + /// + /// Définit le titre du titre. + /// public string Libelle { get; set; } + /// + /// Définit la chronique du titre. + /// public string Chronique { get; set; } + /// + /// Définit la date de sortie du titre. + /// public DateTime DateSortie { get; set; } + /// + /// Définit le nombre de likes du titre. + /// public int NbLikes { get; set; } + /// + /// Définit l'url de la jaquette de l'album associé au titre. + /// public string UrlJaquette { get; set; } + /// + /// Définit l'url d'écoute du titre. + /// public string UrlEcoute { get; set; } + /// + /// Définit le nom de l'artiste associé au titre. + /// public string ArtisteNom { get; set; } + /// + /// Définit le nom de l'album associé au titre. + /// public List