namespace Webzine.WebApplication.Areas.Administration.Controllers; using Microsoft.AspNetCore.Mvc; using Webzine.Entity; using Webzine.Repository.Contracts; using Webzine.WebApplication.Areas.Administration.ViewModels.Artiste; /// /// Contrôleur pour la gestion des artistes dans l'administration du webzine. /// [Area("Administration")] public class ArtisteController : Controller { private readonly ILogger logger; private readonly IArtisteRepository artisteRepository; private readonly IConfiguration configuration; /// /// Initializes a new instance of the class. /// Initialise une nouvelle instance de la classe . /// /// Logger. /// Repository pour les artistes. /// Configuration. public ArtisteController( ILogger logger, IArtisteRepository artisteRepository, IConfiguration configuration) { this.logger = logger; this.artisteRepository = artisteRepository; this.configuration = configuration; } /// /// Affiche la liste des artistes paginée. /// /// Le numéro de page pour la pagination des artistes (par défaut à 0). /// Redirection. public IActionResult Index(int page = 0) { int artistes_par_page = this.configuration.GetValue("Webzine:NombreDeLignesAdministration"); IEnumerable artistes = this.artisteRepository.FindArtistes(page * artistes_par_page, artistes_par_page); int totalArtistes = this.artisteRepository.Count(); int totalPages = (int)Math.Ceiling((double)totalArtistes / artistes_par_page); var model = new ArtisteIndexViewModel { Artistes = artistes.ToList(), Page = page, TotalPages = totalPages, }; return this.View(model); } /// /// Renvoie à la page pour créer un artiste. /// /// Redirection. public IActionResult Create() { return this.View(); } /// /// Formulaire de création d'un artiste. /// /// Paramètre nécessaire pour la création d'un artiste. /// Redirection sur la page Index. [HttpPost] public IActionResult Create(ArtisteCreateViewModel model) { // Créer un objet Artiste avecc les paramètres. var artiste = new Artiste { Nom = model.Nom, Biographie = model.Biographie, }; this.artisteRepository.Add(artiste); this.logger.LogInformation("Création d'un nouvel artiste: {Nom}", artiste.Nom); // Renvoyer sur la page Index. return this.RedirectToAction("Index"); } /// /// Renvoie à la page modifier un artiste. /// /// L'identifiant de l'artiste à modifier. /// Redirection. public IActionResult Edit(int id) { var artiste = this.artisteRepository.Find(id); if (artiste == null) { return this.RedirectToAction("Index"); } return this.View(artiste); } /// /// Traitement du formulaire de modification d'un artiste. /// /// Paramètre d'un artiste. /// Redirection sur Index. [HttpPost] public IActionResult Edit(ArtisteEditViewModel model) { var artiste = this.artisteRepository.Find(model.Id); if (artiste == null) { return this.RedirectToAction("Index"); } artiste.Nom = model.Nom; artiste.Biographie = model.Biographie; this.artisteRepository.Update(artiste); return this.RedirectToAction("Index"); } /// /// Renvoie à la page supprimer un artiste. /// /// L'identifiant de l'artiste à supprimer. /// Redirection. public IActionResult Delete(int id) { var artiste = this.artisteRepository.Find(id); if (artiste == null) { return this.RedirectToAction("Index"); } var model = new AdminArtisteForm { Id = id, Nom = artiste.Nom, Biographie = artiste.Biographie, }; return this.View(model); } /// /// Méthode POST pour supprimer un artiste. /// /// L'artiste à supprimer. /// Redirige vers la page d'index d'admin artiste. [HttpPost] public IActionResult Delete(AdminArtisteForm model) { var artiste = this.artisteRepository.Find(model.Id); if (artiste != null) { this.artisteRepository.Delete(artiste); } return this.RedirectToAction("Index"); } }