171 lines
5.1 KiB
C#
171 lines
5.1 KiB
C#
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
using Webzine.Entity;
|
|
using Webzine.Repository.Contracts;
|
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Artiste;
|
|
|
|
/// <summary>
|
|
/// Contrôleur pour la gestion des artistes dans l'administration du webzine.
|
|
/// </summary>
|
|
[Area("Administration")]
|
|
public class ArtisteController : Controller
|
|
{
|
|
private readonly ILogger<ArtisteController> logger;
|
|
private readonly IArtisteRepository artisteRepository;
|
|
private readonly IConfiguration configuration;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="ArtisteController"/> class.
|
|
/// Initialise une nouvelle instance de la classe <see cref="ArtisteController"/>.
|
|
/// </summary>
|
|
/// <param name="logger">Logger.</param>
|
|
/// <param name="artisteRepository">Repository pour les artistes.</param>
|
|
/// <param name="configuration">Configuration.</param>
|
|
public ArtisteController(
|
|
ILogger<ArtisteController> logger,
|
|
IArtisteRepository artisteRepository,
|
|
IConfiguration configuration)
|
|
{
|
|
this.logger = logger;
|
|
this.artisteRepository = artisteRepository;
|
|
this.configuration = configuration;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche la liste des artistes paginée.
|
|
/// </summary>
|
|
/// <param name="page">Le numéro de page pour la pagination des artistes (par défaut à 0).</param>
|
|
/// <returns>Redirection.</returns>
|
|
public IActionResult Index(int page = 0)
|
|
{
|
|
int artistes_par_page = this.configuration.GetValue<int>("Webzine:NombreDeLignesAdministration");
|
|
|
|
IEnumerable<Artiste> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Renvoie à la page pour créer un artiste.
|
|
/// </summary>
|
|
/// <returns>Redirection.</returns>
|
|
public IActionResult Create()
|
|
{
|
|
return this.View();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Formulaire de création d'un artiste.
|
|
/// </summary>
|
|
/// <param name="model">Paramètre nécessaire pour la création d'un artiste.</param>
|
|
/// <returns>Redirection sur la page Index.</returns>
|
|
[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");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Renvoie à la page modifier un artiste.
|
|
/// </summary>
|
|
/// <param name="id">L'identifiant de l'artiste à modifier. </param>
|
|
/// <returns>Redirection.</returns>
|
|
public IActionResult Edit(int id)
|
|
{
|
|
var artiste = this.artisteRepository.Find(id);
|
|
|
|
if (artiste == null)
|
|
{
|
|
return this.RedirectToAction("Index");
|
|
}
|
|
|
|
return this.View(artiste);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Traitement du formulaire de modification d'un artiste.
|
|
/// </summary>
|
|
/// <param name="model">Paramètre d'un artiste.</param>
|
|
/// <returns>Redirection sur Index.</returns>
|
|
[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");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Renvoie à la page supprimer un artiste.
|
|
/// </summary>
|
|
/// <param name="id">L'identifiant de l'artiste à supprimer. </param>
|
|
/// <returns>Redirection.</returns>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Méthode POST pour supprimer un artiste.
|
|
/// </summary>
|
|
/// <param name="model">L'artiste à supprimer.</param>
|
|
/// <returns>Redirige vers la page d'index d'admin artiste.</returns>
|
|
[HttpPost]
|
|
public IActionResult Delete(AdminArtisteForm model)
|
|
{
|
|
var artiste = this.artisteRepository.Find(model.Id);
|
|
|
|
if (artiste != null)
|
|
{
|
|
this.artisteRepository.Delete(artiste);
|
|
}
|
|
|
|
return this.RedirectToAction("Index");
|
|
}
|
|
} |