namespace Webzine.WebApplication.Areas.Administration.Controllers { using Microsoft.AspNetCore.Mvc; using Webzine.Repository.Contracts; using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire; /// /// Contrôleur pour la gestion des commentaires dans l'administration du webzine. Ce contrôleur permet d'afficher la liste des commentaires, de supprimer un commentaire spécifique et de gérer les interactions liées aux commentaires dans l'interface d'administration. /// [Area("Administration")] public class CommentaireController : Controller { private readonly ILogger logger; private readonly ICommentaireRepository commentaireRepository; private readonly IConfiguration configuration; /// /// Initializes a new instance of the class. /// Initialise une nouvelle instance de la classe . /// Utilise l'injection de dépendances pour récupérer le repository. /// /// Service de journalisation injecté. /// Le repository des commentaires injecté. /// Service de configuration injecté pour accéder aux paramètres de configuration. public CommentaireController( ILogger logger, ICommentaireRepository commentaireRepository, IConfiguration configuration) { this.logger = logger; this.commentaireRepository = commentaireRepository; this.configuration = configuration; this.logger.LogInformation("Initialisation du contrôleur CommentaireController."); } /// /// Affiche la liste des commentaires dans la vue Index. /// /// Le numéro de page pour la pagination des commentaires (par défaut à 0). /// La vue Index avec le ViewModel contenant la liste des commentaires. public IActionResult Index(int page = 0) { int commentaires_par_page = this.configuration.GetValue("Webzine:NombreDeLignesAdministration"); // Récupération des commentaires depuis le repository var commentaires = this.commentaireRepository.FindCommentaires(page * commentaires_par_page, commentaires_par_page); int totalCommentaires = this.commentaireRepository.Count(); // Initialisation du ViewModel var viewModel = new CommentaireIndexViewModel { Commentaires = commentaires, Page = page, TotalPages = (int)Math.Ceiling((double)totalCommentaires / commentaires_par_page), }; return this.View(viewModel); } /// /// Affiche la vue de confirmation de suppression d'un commentaire, en récupérant les détails à partir de l'identifiant fourni. /// /// L'identifiant du commentaire à supprimer. /// La vue de confirmation de suppression avec le ViewModel contenant les détails, ou une redirection vers l'index si introuvable. public IActionResult Delete(int id) { var commentaire = this.commentaireRepository.Find(id); if (commentaire == null) { return this.RedirectToAction("Index"); } var model = new CommentaireDeleteViewModel { IdCommentaire = commentaire.IdCommentaire, Auteur = commentaire.Auteur, Contenu = commentaire.Contenu, DateCreation = commentaire.DateCreation, TitreLibelle = commentaire.Titre?.Libelle, }; return this.View(model); } /// /// Effectue la suppression réelle du commentaire. /// /// Le CommentaireDeleteViewModel. /// Redirection vers la vue Index après suppression. [HttpPost] public IActionResult Delete(CommentaireDeleteViewModel model) { var commentaire = this.commentaireRepository.Find(model.IdCommentaire); if (commentaire != null) { this.commentaireRepository.Delete(commentaire); } return this.RedirectToAction("Index"); } } }