diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs new file mode 100644 index 0000000..820cb0f --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Controllers/CommentairesController.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Webzine.Entity; +using Webzine.Entity.Fixtures; +using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire; + +namespace Webzine.WebApplication.Areas.Administration.Controllers +{ + [Area("Administration")] + 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() + { + // 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: Administration/Commentaires/Delete/5 + public ActionResult Delete(int id) + { + 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: 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/Commentaire/CommentaireViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireViewModel.cs new file mode 100644 index 0000000..3ce7115 --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Commentaire/CommentaireViewModel.cs @@ -0,0 +1,21 @@ +// +// Copyright (c) Webzine. All rights reserved. +// + + +// +// Copyright (c) Webzine. All rights reserved. +// +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire +{ + /// + /// ViewModel pour afficher la liste des commentaires en administration. + /// + public class CommentaireViewModel + { + /// + /// Obtient ou définit la liste des commentaires. + /// + 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/Commentaire/Index.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Index.cshtml new file mode 100644 index 0000000..c8241d3 --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Views/Commentaire/Index.cshtml @@ -0,0 +1,48 @@ +@model Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire.CommentaireViewModel + +@{ + ViewData["Title"] = "Commentaires"; +} + + +
+

Commentaires

+ +
+ + + + + + + + + + + + @foreach (Webzine.Entity.Commentaire commentaire in Model.Commentaires) + { + + + + + + + + } + +
TitreAuteurCommentaireDate de créationActions
+ @commentaire.Titre.Libelle + + @commentaire.Auteur + + @commentaire.Contenu + + @commentaire.DateCreation.ToString("dd/MM/yyyy HH:mm:ss") + + + + +
+
+
\ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/Shared/_Header.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Shared/_Header.cshtml new file mode 100644 index 0000000..9a66f6e --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Views/Shared/_Header.cshtml @@ -0,0 +1,58 @@ +@* + For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 +*@ +@{ +} +
+ +
\ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/Shared/_Layout.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..a3cfc53 --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Views/Shared/_Layout.cshtml @@ -0,0 +1,19 @@ + + + + + + @ViewData["Title"] - Webzine + + @* Ajout de bootstrap *@ + + + + @* Ajout de font-awesome *@ + + + + @await Html.PartialAsync("_Header") + @RenderBody() + + \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/_ViewImports.cshtml b/Webzine.WebApplication/Areas/Administration/Views/_ViewImports.cshtml new file mode 100644 index 0000000..505b08b --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Views/_ViewImports.cshtml @@ -0,0 +1,2 @@ +@* Permet de factoriser les imports de tag helpers *@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/_ViewStart.cshtml b/Webzine.WebApplication/Areas/Administration/Views/_ViewStart.cshtml new file mode 100644 index 0000000..d641c67 --- /dev/null +++ b/Webzine.WebApplication/Areas/Administration/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_Layout"; +} \ No newline at end of file diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index aec5da5..3d66574 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,6 +30,12 @@ try // Active le middleware permettant le routage des requétes entrantes. app.UseRouting(); + + // Ajoute une route pour les zones (Areas) comme Admin + app.MapControllerRoute( + name: "areas", + pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); + // Ajoute un endpoint permettant de router les urls // avec la forme /controller/action/id(optionnel). app.MapControllerRoute( diff --git a/Webzine.WebApplication/ViewModels/CommentaireViewModel.cs b/Webzine.WebApplication/ViewModels/CommentaireViewModel.cs new file mode 100644 index 0000000..cbd09da --- /dev/null +++ b/Webzine.WebApplication/ViewModels/CommentaireViewModel.cs @@ -0,0 +1,19 @@ +// +// Copyright (c) Webzine. All rights reserved. +// + +using Webzine.Entity; + +namespace Webzine.WebApplication.ViewModels +{ + /// + /// ViewModel pour afficher la liste des commentaires en administration. + /// + public class CommentaireViewModel + { + /// + /// Obtient ou définit la liste des commentaires. + /// + public IEnumerable Commentaires { get; set; } = new List(); + } +} \ No newline at end of file