using Microsoft.AspNetCore.Mvc; using Webzine.Entity; using Webzine.Entity.Fixtures; using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire; namespace Webzine.WebApplication.Areas.Administration.Controllers { [Area("Administration")] public class CommentaireController : Controller { private readonly ILogger _logger; private readonly List _commentaires; /// /// Initialise une nouvelle instance du . /// Les données sont générées dynamiquement via . /// /// Service de journalisation injecté. public CommentaireController(ILogger logger) { this._logger = logger; this._logger.LogInformation("Initialisation du contrôleur CommentaireController."); var factory = new DataFactory(); // TODO injecter le factory via DI pour éviter de le recréer à chaque fois // faire une classe statique var _artistes = factory.GenerateArtists(10); var _styles = factory.GenerateStyles(10); var _titres = factory.GenerateTitres(30, _artistes, _styles); _commentaires = factory.GenerateCommentaires(50, _titres); this._logger.LogInformation("Données fictives générées avec succès."); } /// /// Affiche la liste des commentaires dans la vue Index. /// /// >La vue Index avec le ViewModel contenant la liste des commentaires. public IActionResult Index() { // Création de données "bouchon" (mock) pour tester l'affichage var listeCommentaires = new List { new Commentaire { IdCommentaire = 1, // Correction: Id -> IdCommentaire Auteur = "Michel", // Correction: Nom -> Auteur Contenu = "Nulla sed velit nec tellus gravida molestie", DateCreation = new DateTime(2023, 1, 22, 15, 59, 28), // Important : On initialise l'objet Titre pour accéder à Titre.Libelle Titre = new Titre { Libelle = "St Germain - So Flute" }, }, new Commentaire { IdCommentaire = 2, Auteur = "Jeff", Contenu = "Lorem ipsum dolor sit.", DateCreation = new DateTime(2023, 1, 22, 14, 27, 8), Titre = new Titre { Libelle = "Queen - Bohemian Rapsody" }, }, new Commentaire { IdCommentaire = 3, Auteur = "Eva", Contenu = "Aenean vulputate eleifend tellus.", DateCreation = new DateTime(2023, 1, 22, 13, 2, 17), Titre = new Titre { Libelle = "Rammstein - Du hast" }, }, }; // Initialisation du ViewModel var viewModel = new CommentaireViewModel { Commentaires = listeCommentaires }; return View(viewModel); } /// /// Affiche la vue de confirmation de suppression d'un commentaire, en récupérant les détails du commentaire à supprimer à partir de l'identifiant fourni. /// /// L'identifiant du commentaire à supprimer. /// La vue de confirmation de suppression avec le ViewModel contenant les détails du commentaire à supprimer, ou une redirection vers l'index si le commentaire n'existe pas. public IActionResult Delete(int id) { var commentaire = _commentaires .FirstOrDefault(c => c.IdCommentaire == id); if (commentaire == null) { this._logger.LogWarning("Commentaire avec ID {Id} introuvable pour suppression.", id); return RedirectToAction("Index"); } var vm = new CommentaireDeleteViewModel { IdCommentaire = commentaire.IdCommentaire, Auteur = commentaire.Auteur, Contenu = commentaire.Contenu, DateCreation = commentaire.DateCreation, TitreLibelle = commentaire.Titre?.Libelle }; return View(vm); } } }