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");
}
}