namespace Webzine.WebApplication.Controllers { using Microsoft.AspNetCore.Mvc; using Webzine.Repository.Contracts; using Webzine.WebApplication.ViewModels.Artiste; /// /// 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. /// public class ArtisteController : Controller { // Injection du logger via le constructeur private readonly ILogger logger; private readonly IArtisteRepository artisteRepository; /// /// Initialise une nouvelle instance du . avec un service de journalisation injecté. /// /// Service de journalisation injecté pour enregistrer les événements et les erreurs. /// Repository pour accéder aux données des artistes, injecté pour permettre les opérations de création, modification, suppression et affichage des artistes. public ArtisteController( ILogger logger, IArtisteRepository artisteRepository) { this.logger = logger; this.logger.LogDebug("Initialisation du ArtisteController"); this.artisteRepository = artisteRepository; } /// /// Affiche la liste des artistes. /// /// Le nom de l'artiste à rechercher, formaté en kebab-case (ex: "fatal-bazooka"). /// 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é. 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); } } }