using Microsoft.AspNetCore.Mvc; using Webzine.Entity; using Webzine.Entity.Fixtures; using Webzine.WebApplication.Areas.Administrations.ViewModels.Commentaire; namespace Webzine.WebApplication.Areas.Administrations.Controllers { [Area("Administrations")] 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) { _logger = logger; _logger.LogInformation("Initialisation du contrôleur CommentaireController."); var factory = new DataFactory(); var _artistes = factory.GenerateArtists(10); var _styles = factory.GenerateStyles(10); var _titres = factory.GenerateTitres(30, _artistes, _styles); _commentaires = factory.GenerateCommentaires(50, _titres); _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 ActionResult 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 réponse NotFound si le commentaire n'existe pas. public ActionResult Delete(int id) { var commentaire = _commentaires .FirstOrDefault(c => c.IdCommentaire == id); if (commentaire == null) return NotFound(); var vm = new CommentaireDeleteViewModel { IdCommentaire = commentaire.IdCommentaire, Auteur = commentaire.Auteur, Contenu = commentaire.Contenu, DateCreation = commentaire.DateCreation, TitreLibelle = commentaire.Titre?.Libelle }; return View(vm); } /// /// Traite la confirmation de suppression d'un commentaire. En cas de succès, redirige vers la liste des commentaires. En cas d'erreur, affiche à nouveau la vue de confirmation avec le message d'erreur. /// /// L'identifiant du commentaire à supprimer. /// Le ViewModel contenant les détails du commentaire à supprimer, utilisé pour afficher les informations en cas d'erreur. /// Redirection vers la liste des commentaires en cas de succès, ou la vue de confirmation avec le message d'erreur en cas d'échec. [HttpPost] [ValidateAntiForgeryToken] public ActionResult Delete(int id, CommentaireDeleteViewModel model) { try { return RedirectToAction(); } catch (Exception e) { // Log de l'erreur Console.WriteLine(e); return View(model); } } } }