Files
webzine/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs
2026-04-03 16:49:56 +02:00

107 lines
4.6 KiB
C#

namespace Webzine.WebApplication.Areas.Administration.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
/// <summary>
/// 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.
/// </summary>
[Area("Administration")]
public class CommentaireController : Controller
{
private readonly ILogger<CommentaireController> logger;
private readonly ICommentaireRepository commentaireRepository;
private readonly IConfiguration configuration;
/// <summary>
/// Initializes a new instance of the <see cref="CommentaireController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="CommentaireController"/>.
/// Utilise l'injection de dépendances pour récupérer le repository.
/// </summary>
/// <param name="logger">Service de journalisation injecté.</param>
/// <param name="commentaireRepository">Le repository des commentaires injecté.</param>
/// <param name="configuration">Service de configuration injecté pour accéder aux paramètres de configuration.</param>
public CommentaireController(
ILogger<CommentaireController> logger,
ICommentaireRepository commentaireRepository,
IConfiguration configuration)
{
this.logger = logger;
this.commentaireRepository = commentaireRepository;
this.configuration = configuration;
this.logger.LogInformation("Initialisation du contrôleur CommentaireController.");
}
/// <summary>
/// Affiche la liste des commentaires dans la vue Index.
/// </summary>
/// <param name="page">Le numéro de page pour la pagination des commentaires (par défaut à 0).</param>
/// <returns>La vue Index avec le ViewModel contenant la liste des commentaires.</returns>
public IActionResult Index(int page = 0)
{
int commentaires_par_page = this.configuration.GetValue<int>("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);
}
/// <summary>
/// Affiche la vue de confirmation de suppression d'un commentaire, en récupérant les détails à partir de l'identifiant fourni.
/// </summary>
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails, ou une redirection vers l'index si introuvable.</returns>
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);
}
/// <summary>
/// Effectue la suppression réelle du commentaire.
/// </summary>
/// <param name="model">Le CommentaireDeleteViewModel.</param>
/// <returns>Redirection vers la vue Index après suppression.</returns>
[HttpPost]
public IActionResult Delete(CommentaireDeleteViewModel model)
{
var commentaire = this.commentaireRepository.Find(model.IdCommentaire);
if (commentaire != null)
{
this.commentaireRepository.Delete(commentaire);
}
return this.RedirectToAction("Index");
}
}
}