#167 : Ajout des CRUD sur Style.

This commit is contained in:
Loic Masi
2026-03-31 19:45:50 +02:00
parent 82f4321b5c
commit 00b8c2b33f
3 changed files with 158 additions and 86 deletions

View File

@@ -1,82 +1,119 @@
namespace Webzine.WebApplication.Areas.Administration.Controllers namespace Webzine.WebApplication.Areas.Administration.Controllers;
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
/// <summary>
/// Controleur pour la gestion des styles dans l'administration du webzine.
/// </summary>
[Area("Administration")]
public class StyleController : Controller
{ {
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
/// <summary>
/// Contrôleur pour la gestion des styles dans l'administration du webzine.
/// </summary>
[Area("Administration")]
public class StyleController : Controller
{
private readonly ILogger<StyleController> logger; private readonly ILogger<StyleController> logger;
private readonly IStyleRepository styleRepository; private readonly IStyleRepository styleRepository;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="StyleController"/> class. /// Initializes a new instance of the <see cref="StyleController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="StyleController"/>.
/// </summary> /// </summary>
/// <param name="logger">Service de journalisation injecté.</param> /// <param name="logger">Service de journalisation injecte.</param>
/// <param name="styles">Repository des styles injecté.</param> /// <param name="styleRepository">Repository des styles injecte.</param>
public StyleController( public StyleController(
ILogger<StyleController> logger, ILogger<StyleController> logger,
IStyleRepository styleRepository) IStyleRepository styleRepository)
{ {
this.logger = logger; this.logger = logger;
this.logger.LogInformation("Initialisation du contrôleur StyleController.");
this.styleRepository = styleRepository; this.styleRepository = styleRepository;
this.logger.LogInformation("Initialisation du controleur StyleController.");
} }
/// <summary> /// <summary>
/// Affiche la liste des styles dans la vue Index. /// Affiche la liste des styles dans la vue Index.
/// </summary> /// </summary>
/// <returns>La vue Index avec le ViewModel contenant la liste des styles.</returns> /// <returns>La vue Index avec la liste des styles.</returns>
public IActionResult Index() public IActionResult Index()
{ {
var listeStyles = this.styleRepository.FindAll().Take(10); IEnumerable<Style> listeStyles = this.styleRepository.FindAll().Take(10);
return this.View(listeStyles); return this.View(listeStyles);
} }
/// <summary> /// <summary>
/// Affiche la vue de création d'un nouveau style. /// Affiche la vue de creation d'un nouveau style.
/// </summary> /// </summary>
/// <returns>La vue Create pour ajouter un nouveau style.</returns> /// <returns>La vue Create pour ajouter un nouveau style.</returns>
public IActionResult Create() public IActionResult Create()
{ {
return this.View(); var model = new StyleCreateViewModel
{
Libelle = string.Empty,
};
return this.View(model);
} }
/// <summary> /// <summary>
/// Affiche la vue de confirmation de suppression d'un style, en récupérant les détails du style à supprimer à partir de l'identifiant fourni. /// Cree un nouveau style.
/// </summary> /// </summary>
/// <param name="id">L'identifiant du style à supprimer.</param> /// <param name="model">Nouveau style.</param>
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du style à supprimer, ou une redirection vers l'index si le style n'existe pas.</returns> /// <returns>IActionResult.</returns>
[HttpPost]
public IActionResult Create(StyleCreateViewModel model)
{
if (!this.ModelState.IsValid)
{
return this.View(model);
}
var style = new Style
{
Libelle = model.Libelle,
};
this.styleRepository.Add(style);
return this.RedirectToAction("Index");
}
/// <summary>
/// Affiche la vue de confirmation de suppression d'un style.
/// </summary>
/// <param name="id">L'identifiant du style a supprimer.</param>
/// <returns>La vue de confirmation ou une redirection vers l'index si le style n'existe pas.</returns>
public IActionResult Delete(int id) public IActionResult Delete(int id)
{ {
var style = this.styleRepository.Find(id); var style = this.styleRepository.Find(id);
var vm = new StyleDeleteViewModel if (style == null || style.IdStyle == 0)
{
return this.RedirectToAction("Index");
}
var model = new StyleDeleteViewModel
{ {
IdStyle = style.IdStyle, IdStyle = style.IdStyle,
Libelle = style.Libelle, Libelle = style.Libelle,
}; };
return this.View(vm); return this.View(model);
} }
/// <summary> /// <summary>
/// Méthode POST pour supprimer un style. /// Methode POST pour supprimer un style.
/// </summary> /// </summary>
/// <param name="model">Le style à supprimer.</param> /// <param name="model">Le style a supprimer.</param>
/// <returns>Redirige vers la page d'index d'admin style.</returns> /// <returns>Redirige vers la page d'index d'admin style.</returns>
[HttpPost] [HttpPost]
public IActionResult Delete(StyleEditViewModel model) public IActionResult Delete(StyleDeleteViewModel model)
{ {
if (!this.ModelState.IsValid)
{
return this.RedirectToAction("Index");
}
var style = this.styleRepository.Find(model.IdStyle); var style = this.styleRepository.Find(model.IdStyle);
if (style != null) if (style != null)
@@ -88,15 +125,20 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
} }
/// <summary> /// <summary>
/// Affiche la vue d'édition d'un style existant, en récupérant les détails du style à éditer à partir de l'identifiant fourni. /// Affiche la vue d'edition d'un style existant.
/// </summary> /// </summary>
/// <param name="id">L'identifiant du style à éditer.</param> /// <param name="id">L'identifiant du style a editer.</param>
/// <returns>La vue d'édition avec le ViewModel contenant les détails du style à éditer, ou une redirection vers l'index si le style n'existe pas.</returns> /// <returns>La vue d'edition ou une redirection vers l'index si le style n'existe pas.</returns>
[HttpGet] [HttpGet]
public IActionResult Edit(int id) public IActionResult Edit(int id)
{ {
var style = this.styleRepository.Find(id); var style = this.styleRepository.Find(id);
if (style == null || style.IdStyle == 0)
{
return this.RedirectToAction("Index");
}
var model = new StyleEditViewModel var model = new StyleEditViewModel
{ {
IdStyle = style.IdStyle, IdStyle = style.IdStyle,
@@ -105,5 +147,29 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
return this.View(model); return this.View(model);
} }
/// <summary>
/// Met a jour un style existant.
/// </summary>
/// <param name="model">Donnees du style a modifier.</param>
/// <returns>Redirige vers la page d'index d'admin style.</returns>
[HttpPost]
public IActionResult Edit(StyleEditViewModel model)
{
if (!this.ModelState.IsValid)
{
return this.View(model);
}
var style = this.styleRepository.Find(model.IdStyle);
if (style == null)
{
return this.RedirectToAction("Index");
}
style.Libelle = model.Libelle;
this.styleRepository.Update(style);
return this.RedirectToAction("Index");
} }
} }

View File

@@ -4,6 +4,8 @@
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
{ {
using System.ComponentModel.DataAnnotations;
/// <summary> /// <summary>
/// ViewModel pour la création d'un style en administration. /// ViewModel pour la création d'un style en administration.
/// </summary> /// </summary>
@@ -12,6 +14,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
/// <summary> /// <summary>
/// Obtient ou définit le libellé du style. /// Obtient ou définit le libellé du style.
/// </summary> /// </summary>
[Required]
public string Libelle { get; set; } public string Libelle { get; set; }
} }
} }

View File

@@ -4,19 +4,22 @@
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
{ {
using System.ComponentModel.DataAnnotations;
/// <summary> /// <summary>
/// ViewModel pour la modification d'un style en administration. /// ViewModel pour la modification d'un style en administration.
/// </summary> /// </summary>
public class StyleEditViewModel public class StyleEditViewModel
{ {
/// <summary> /// <summary>
/// Obtient ou définit le libellé du style. /// Obtient ou definit l'identifiant du style.
/// </summary> /// </summary>
public int IdStyle { get; set; } public int IdStyle { get; set; }
/// <summary> /// <summary>
/// Obtient ou définit le libellé du style. /// Obtient ou definit le libelle du style.
/// </summary> /// </summary>
[Required]
public string Libelle { get; set; } public string Libelle { get; set; }
} }
} }