199 lines
8.1 KiB
C#
199 lines
8.1 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
|
using Webzine.Entity;
|
|
using Webzine.Entity.Fixtures;
|
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
|
|
|
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
|
|
|
[Area("Administration")]
|
|
public class TitreController : Controller
|
|
{
|
|
private readonly ILogger<TitreController> _logger;
|
|
private readonly List<Titre> _titres;
|
|
private readonly List<Style> _styles;
|
|
private readonly List<Artiste> _artistes;
|
|
|
|
|
|
/// <summary>
|
|
/// Initialise une nouvelle instance du <see cref="TitreController"/>.
|
|
/// Les données sont générées dynamiquement via <see cref="DataFactory"/>.
|
|
/// </summary>
|
|
/// <param name="logger">Service de journalisation injecté.</param>
|
|
public TitreController(ILogger<TitreController> logger)
|
|
{
|
|
_logger = logger;
|
|
|
|
_logger.LogInformation("Initialisation du contrôleur TitreController pour l'Administration.");
|
|
|
|
var factory = new DataFactory();
|
|
|
|
_artistes = factory.GenerateArtists(10);
|
|
_styles = factory.GenerateStyles(10);
|
|
_titres = factory.GenerateTitres(30, _artistes, _styles);
|
|
|
|
factory.GenerateCommentaires(50, _titres);
|
|
|
|
_logger.LogInformation("Données fictives générées avec succès.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche la liste des titres dans la vue Index.
|
|
/// </summary>
|
|
/// <returns>La vue Index avec le ViewModel contenant la liste des titres.</returns>
|
|
public ActionResult Index()
|
|
{
|
|
var model = _titres.Select(t => new AdminTitreList
|
|
{
|
|
Id = t.IdTitre,
|
|
Artiste = t.Artiste?.Nom,
|
|
Titre = t.Libelle,
|
|
Duree = TimeSpan.FromSeconds(t.Duree).ToString(@"mm\:ss"),
|
|
DateSortie = t.DateSortie,
|
|
NbLectures = t.NbLectures,
|
|
NbLikes = t.NbLikes,
|
|
NbCommentaires = t.Commentaires?.Count ?? 0
|
|
}).ToList();
|
|
|
|
return View(model);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche le formulaire de création d'un nouveau titre dans la vue Create.
|
|
/// </summary>
|
|
/// <returns>La vue Create avec le ViewModel contenant les listes déroulantes pour les artistes et les styles.</returns>
|
|
public ActionResult Create()
|
|
{
|
|
var model = new AdminTitreForm
|
|
{
|
|
Artistes = _artistes.Select(a => new SelectListItem
|
|
{
|
|
Value = a.IdArtiste.ToString(),
|
|
Text = a.Nom
|
|
}).ToList(),
|
|
|
|
AllStyles = _styles.Select(s => new SelectListItem
|
|
{
|
|
Value = s.IdStyle.ToString(),
|
|
Text = s.Libelle
|
|
}).ToList()
|
|
};
|
|
|
|
return View(model);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Traite la soumission du formulaire de création d'un nouveau titre. Actuellement, cette méthode est un stub qui redirige vers l'index sans effectuer de logique de création réelle.
|
|
/// </summary>
|
|
/// <param name="collection">Le formulaire soumis contenant les données du nouveau titre. Actuellement, ce paramètre n'est pas utilisé.</param>
|
|
/// <returns>Redirige vers l'action Index après la soumission du formulaire. En cas d'erreur, retourne la vue Create pour permettre à l'utilisateur de corriger les données.</returns>
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken]
|
|
public ActionResult Create(IFormCollection collection)
|
|
{
|
|
try
|
|
{
|
|
return RedirectToAction(nameof(Index));
|
|
}
|
|
catch
|
|
{
|
|
return View();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche le formulaire de modification d'un titre existant dans la vue Edit, en préremplissant les champs avec les données du titre sélectionné. Les listes déroulantes pour les artistes et les styles sont également remplies pour permettre à l'utilisateur de modifier ces associations.
|
|
/// </summary>
|
|
/// <param name="id">L'identifiant du titre à modifier, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
|
|
/// <returns>La vue Edit avec le ViewModel contenant les données du titre à modifier, ainsi que les listes déroulantes pour les artistes et les styles. En cas d'erreur, retourne une réponse NotFound si le titre n'existe pas.</returns>
|
|
public ActionResult Edit(int id)
|
|
{
|
|
var titre = _titres.First(t => t.IdTitre == id);
|
|
|
|
var model = new AdminTitreForm
|
|
{
|
|
Id = titre.IdTitre,
|
|
IdArtiste = titre.IdArtiste,
|
|
Libelle = titre.Libelle,
|
|
Album = titre.Album,
|
|
Chronique = titre.Chronique,
|
|
DateSortie = titre.DateSortie,
|
|
Duree = titre.Duree,
|
|
UrlJaquette = titre.UrlJaquette,
|
|
UrlEcoute = titre.UrlEcoute,
|
|
NbLectures = titre.NbLectures,
|
|
NbLikes = titre.NbLikes,
|
|
Styles = titre.Styles.Select(s => s.IdStyle).ToList(),
|
|
|
|
Artistes = _artistes.Select(a => new SelectListItem
|
|
{
|
|
Value = a.IdArtiste.ToString(),
|
|
Text = a.Nom
|
|
}).ToList(),
|
|
|
|
AllStyles = _styles.Select(s => new SelectListItem
|
|
{
|
|
Value = s.IdStyle.ToString(),
|
|
Text = s.Libelle
|
|
}).ToList()
|
|
};
|
|
|
|
return View(model);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Traite la soumission du formulaire de modification d'un titre existant. Actuellement, cette méthode est un stub qui redirige vers l'index sans effectuer de logique de modification réelle.
|
|
/// </summary>
|
|
/// <param name="id">L'identifiant du titre à modifier, utilisé pour identifier le titre à mettre à jour. Actuellement, ce paramètre n'est pas utilisé dans la logique de traitement.</param>
|
|
/// <param name="collection">Le formulaire soumis contenant les données modifiées du titre. Actuellement, ce paramètre n'est pas utilisé dans la logique de traitement.</param>
|
|
/// <returns>Redirige vers l'action Index après la soumission du formulaire. En cas d'erreur, retourne la vue Edit pour permettre à l'utilisateur de corriger les données.</returns>
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken]
|
|
public ActionResult Edit(int id, IFormCollection collection)
|
|
{
|
|
try
|
|
{
|
|
return RedirectToAction(nameof(Index));
|
|
}
|
|
catch
|
|
{
|
|
return View();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche la vue de confirmation de suppression d'un titre, en récupérant les détails du titre à supprimer à partir de l'identifiant fourni. Le ViewModel contient les informations essentielles du titre, telles que le libellé et le nom de l'artiste, pour permettre à l'utilisateur de confirmer la suppression.
|
|
/// </summary>
|
|
/// <param name="id">L'identifiant du titre à supprimer, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
|
|
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du titre à supprimer, ou une réponse NotFound si le titre n'existe pas.</returns>
|
|
public ActionResult Delete(int id)
|
|
{
|
|
var titre = _titres.First(t => t.IdTitre == id);
|
|
|
|
var model = new AdminTitreDelete
|
|
{
|
|
Id = titre.IdTitre,
|
|
Titre = titre.Libelle,
|
|
Artiste = titre.Artiste?.Nom
|
|
};
|
|
|
|
return View(model);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Traite la confirmation de suppression d'un titre. En cas de succès, redirige vers la liste des titres après avoir supprimé le titre de la liste. En cas d'erreur, affiche à nouveau la vue de confirmation avec le message d'erreur.
|
|
/// </summary>
|
|
/// <param name="model">Le ViewModel contenant les détails du titre à supprimer, utilisé pour identifier le titre à supprimer et pour afficher les informations en cas d'erreur.</param>
|
|
/// <returns>Redirection vers la liste des titres en cas de succès, ou la vue de confirmation avec le message d'erreur en cas d'échec.</returns>
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken]
|
|
public ActionResult Delete(AdminTitreDelete model)
|
|
{
|
|
var titre = _titres.First(t => t.IdTitre == model.Id);
|
|
|
|
_titres.Remove(titre);
|
|
|
|
return RedirectToAction(nameof(Index));
|
|
}
|
|
} |