# Conflicts: # Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs # Webzine.WebApplication/Controllers/ArtisteController.cs # Webzine.WebApplication/Controllers/RechercheController.cs
73 lines
3.4 KiB
C#
73 lines
3.4 KiB
C#
namespace Webzine.WebApplication.Controllers
|
|
{
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
using Webzine.Repository.Contracts;
|
|
using Webzine.WebApplication.ViewModels.Artiste;
|
|
|
|
/// <summary>
|
|
/// Contrôleur pour la gestion des artistes dans l'administration du webzine. Ce contrôleur gère les opérations de création, modification, suppression et affichage des artistes dans l'interface d'administration du webzine. Chaque action du contrôleur prépare un ViewModel spécifique pour la vue correspondante, permettant ainsi une séparation claire entre la logique métier et la présentation des données.
|
|
/// </summary>
|
|
public class ArtisteController : Controller
|
|
{
|
|
// Injection du logger via le constructeur
|
|
private readonly ILogger<ArtisteController> logger;
|
|
private readonly IArtisteRepository artisteRepository;
|
|
|
|
/// <summary>
|
|
/// Initialise une nouvelle instance du <see cref="ArtisteController"/>. avec un service de journalisation injecté.
|
|
/// </summary>
|
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
|
/// <param name="artisteRepository">Repository pour accéder aux données des artistes, injecté pour permettre les opérations de création, modification, suppression et affichage des artistes.</param>
|
|
public ArtisteController(
|
|
ILogger<ArtisteController> logger,
|
|
IArtisteRepository artisteRepository)
|
|
{
|
|
this.logger = logger;
|
|
this.logger.LogDebug("Initialisation du ArtisteController");
|
|
this.artisteRepository = artisteRepository;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche la liste des artistes.
|
|
/// </summary>
|
|
/// <param name="nom">Le nom de l'artiste à rechercher, formaté en kebab-case (ex: "fatal-bazooka").</param>
|
|
/// <returns>La vue de l'artiste avec son ViewModel, ou une redirection vers l'accueil si le nom est vide, ou une erreur 404 si l'artiste n'est pas trouvé.</returns>
|
|
public IActionResult Index(string nom)
|
|
{
|
|
this.logger.LogInformation("Tentative d'accès à l'artiste avec le nom : {NomArtiste}", nom);
|
|
|
|
if (string.IsNullOrEmpty(nom))
|
|
{
|
|
this.logger.LogWarning("Nom de l'artiste manquant dans la requête.");
|
|
return this.RedirectToAction("Index", "Accueil");
|
|
}
|
|
|
|
// On transforme "fatal-bazooka" en "Fatal Bazooka"
|
|
string nomPropre = System.Globalization.CultureInfo.CurrentCulture.TextInfo
|
|
.ToTitleCase(nom.Replace("-", " "));
|
|
|
|
var artiste = this.artisteRepository.FindByName(nomPropre);
|
|
|
|
if (artiste == null)
|
|
{
|
|
this.logger.LogWarning("Artiste non trouvé avec le nom : {NomArtiste}", nomPropre);
|
|
return this.RedirectToAction("Index", "Accueil");
|
|
}
|
|
|
|
var viewModel = new ArtisteDetailsViewModel
|
|
{
|
|
IdArtiste = artiste.IdArtiste,
|
|
Nom = artiste.Nom,
|
|
Biographie = artiste.Biographie,
|
|
AlbumsGroupes = artiste.Titres
|
|
.OrderBy(t => t.Libelle)
|
|
.GroupBy(t => t.Album)
|
|
.OrderBy(g => g.Key),
|
|
};
|
|
|
|
this.logger.LogInformation("Artiste trouvé : {NomArtiste}", nom);
|
|
return this.View(viewModel);
|
|
}
|
|
}
|
|
} |