From c4206604c4bcb8df1963a620fe789dc56f6246fb Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Thu, 5 Mar 2026 16:29:41 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20Ajouter=20la=20fonctionnalit=C3=A9=20de?= =?UTF-8?q?=20suppression=20de=20commentaires=20avec=20un=20nouveau=20View?= =?UTF-8?q?Model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CommentairesController.cs | 114 +++++++++--------- .../Commentaire/CommentaireDeleteViewModel.cs | 14 +++ .../{ => Commentaire}/CommentaireViewModel.cs | 7 +- .../Views/Commentaire/Delete.cshtml | 42 +++++++ .../Index.cshtml | 14 +-- .../Controllers/CommentairesController.cs | 113 ----------------- 6 files changed, 123 insertions(+), 181 deletions(-) create mode 100644 Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireDeleteViewModel.cs rename Webzine.WebApplication/Areas/Administration/ViewModels/{ => Commentaire}/CommentaireViewModel.cs (83%) create mode 100644 Webzine.WebApplication/Areas/Administration/Views/Commentaire/Delete.cshtml rename Webzine.WebApplication/Areas/Administration/Views/{Commentaires => Commentaire}/Index.cshtml (66%) delete mode 100644 Webzine.WebApplication/Controllers/CommentairesController.cs diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs index 8f47c7f..820cb0f 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs @@ -3,13 +3,38 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Webzine.Entity; -using Webzine.WebApplication.Areas.Administration.ViewModels; +using Webzine.Entity.Fixtures; +using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire; namespace Webzine.WebApplication.Areas.Administration.Controllers { [Area("Administration")] - public class CommentairesController : Controller + public class CommentaireController : Controller { + private readonly ILogger _logger; + private readonly List _commentaires; + /// + /// Initialise une nouvelle instance du . + /// Les données sont générées dynamiquement via . + /// + /// Service de journalisation injecté. + public CommentaireController(ILogger logger) + { + _logger = logger; + + _logger.LogInformation("Initialisation du contrôleur CommentaireController."); + + var factory = new DataFactory(); + + var _artistes = factory.GenerateArtists(10); + var _styles = factory.GenerateStyles(10); + var _titres = factory.GenerateTitres(30, _artistes, _styles); + + _commentaires = factory.GenerateCommentaires(50, _titres); + + _logger.LogInformation("Données fictives générées avec succès."); + } + // GET: Administration/Commentaires public ActionResult Index() { @@ -53,61 +78,42 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers } - - // GET: CommentairesController/Details/5 - public ActionResult Details(int id) - { - return View(); - } - - // GET: CommentairesController/Create - public ActionResult Create() - { - return View(); - } - - // POST: CommentairesController/Create - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Create(IFormCollection collection) - { - try - { - return RedirectToAction(nameof(Index)); - } - catch - { - return View(); - } - } - - // GET: CommentairesController/Edit/5 - public ActionResult Edit(int id) - { - return View(); - } - - // POST: CommentairesController/Edit/5 - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Edit(int id, IFormCollection collection) - { - try - { - return RedirectToAction(nameof(Index)); - } - catch - { - return View(); - } - } - - // GET: CommentairesController/Delete/5 + // GET: Administration/Commentaires/Delete/5 public ActionResult Delete(int id) { - return View(); + var commentaire = _commentaires + .FirstOrDefault(c => c.IdCommentaire == id); + + if (commentaire == null) + return NotFound(); + + var vm = new CommentaireDeleteViewModel + { + IdCommentaire = commentaire.IdCommentaire, + Auteur = commentaire.Auteur, + Contenu = commentaire.Contenu, + DateCreation = commentaire.DateCreation, + TitreLibelle = commentaire.Titre?.Libelle + }; + + return View(vm); } - // POST: CommentairesController/Delete/5 + // POST: Administration/Commentaires/Delete/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Delete(int id, CommentaireDeleteViewModel model) + { + try + { + return RedirectToAction(); + } + catch (Exception e) + { + // Log de l'erreur + Console.WriteLine(e); + return View(model); + } + } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireDeleteViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireDeleteViewModel.cs new file mode 100644 index 0000000..9b6b8c6 --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireDeleteViewModel.cs @@ -0,0 +1,14 @@ +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire; + +public class CommentaireDeleteViewModel +{ + public int IdCommentaire { get; set; } + + public string? Auteur { get; set; } + + public string? Contenu { get; set; } + + public DateTime DateCreation { get; set; } + + public string? TitreLibelle { get; set; } +} \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/CommentaireViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireViewModel.cs similarity index 83% rename from Webzine.WebApplication/Areas/Administration/ViewModels/CommentaireViewModel.cs rename to Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireViewModel.cs index f2d8c5c..3ce7115 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/CommentaireViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireViewModel.cs @@ -6,10 +6,7 @@ // // Copyright (c) Webzine. All rights reserved. // - -using Webzine.Entity; - -namespace Webzine.WebApplication.Areas.Administration.ViewModels +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire { /// /// ViewModel pour afficher la liste des commentaires en administration. @@ -19,6 +16,6 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels /// /// Obtient ou définit la liste des commentaires. /// - public IEnumerable Commentaires { get; set; } = new List(); + public IEnumerable Commentaires { get; set; } = new List(); } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Delete.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Delete.cshtml new file mode 100644 index 0000000..f9fa126 --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Delete.cshtml @@ -0,0 +1,42 @@ +@model Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire.CommentaireDeleteViewModel + +@{ + ViewData["Title"] = "Supprimer un commentaire"; +} + +
+ +

Supprimer un commentaire

+
+ +

+ Êtes-vous sûr de vouloir supprimer le commentaire suivant ? +

+ +
+

@Model.Contenu

+ +
+ — @Model.Auteur + le @Model.DateCreation.ToString("dd/MM/yyyy HH:mm:ss") + sur @Model.TitreLibelle +
+
+ +
+ + + +
+ +
+
+ + + Retour à l'administration des commentaires + + +
\ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/Commentaires/Index.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Index.cshtml similarity index 66% rename from Webzine.WebApplication/Areas/Administration/Views/Commentaires/Index.cshtml rename to Webzine.WebApplication/Areas/Administration/Views/Commentaire/Index.cshtml index fbb1915..c8241d3 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Commentaires/Index.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Index.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.CommentaireViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire.CommentaireViewModel @{ ViewData["Title"] = "Commentaires"; @@ -24,7 +24,7 @@ { - @(commentaire.Titre != null ? commentaire.Titre.Libelle : "Titre inconnu") + @commentaire.Titre.Libelle @commentaire.Auteur @@ -36,13 +36,9 @@ @commentaire.DateCreation.ToString("dd/MM/yyyy HH:mm:ss") -
- @Html.AntiForgeryToken() - - -
+ + + } diff --git a/Webzine.WebApplication/Controllers/CommentairesController.cs b/Webzine.WebApplication/Controllers/CommentairesController.cs deleted file mode 100644 index 9c60b25..0000000 --- a/Webzine.WebApplication/Controllers/CommentairesController.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Webzine.Entity; -using Webzine.WebApplication.ViewModels; - -namespace Webzine.WebApplication.Controllers -{ - [Area("Admin")] - public class CommentairesController : Controller - { - // GET: Admin/Commentaires - public ActionResult Index() - { - // Création de données "bouchon" (mock) pour tester l'affichage - var listeCommentaires = new List - { - new Commentaire - { - IdCommentaire = 1, // Correction: Id -> IdCommentaire - Auteur = "Michel", // Correction: Nom -> Auteur - Contenu = "Nulla sed velit nec tellus gravida molestie", - DateCreation = new DateTime(2023, 1, 22, 15, 59, 28), - // Important : On initialise l'objet Titre pour accéder à Titre.Libelle - Titre = new Titre { Libelle = "St Germain - So Flute" }, - }, - new Commentaire - { - IdCommentaire = 2, - Auteur = "Jeff", - Contenu = "Lorem ipsum dolor sit.", - DateCreation = new DateTime(2023, 1, 22, 14, 27, 8), - Titre = new Titre { Libelle = "Queen - Bohemian Rapsody" }, - }, - new Commentaire - { - IdCommentaire = 3, - Auteur = "Eva", - Contenu = "Aenean vulputate eleifend tellus.", - DateCreation = new DateTime(2023, 1, 22, 13, 2, 17), - Titre = new Titre { Libelle = "Rammstein - Du hast" }, - }, - }; - - // Initialisation du ViewModel - var viewModel = new CommentaireViewModel - { - Commentaires = listeCommentaires - }; - - return View(viewModel); - } - - - - // GET: CommentairesController/Details/5 - public ActionResult Details(int id) - { - return View(); - } - - // GET: CommentairesController/Create - public ActionResult Create() - { - return View(); - } - - // POST: CommentairesController/Create - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Create(IFormCollection collection) - { - try - { - return RedirectToAction(nameof(Index)); - } - catch - { - return View(); - } - } - - // GET: CommentairesController/Edit/5 - public ActionResult Edit(int id) - { - return View(); - } - - // POST: CommentairesController/Edit/5 - [HttpPost] - [ValidateAntiForgeryToken] - public ActionResult Edit(int id, IFormCollection collection) - { - try - { - return RedirectToAction(nameof(Index)); - } - catch - { - return View(); - } - } - - // GET: CommentairesController/Delete/5 - public ActionResult Delete(int id) - { - return View(); - } - - // POST: CommentairesController/Delete/5 - } -} \ No newline at end of file