From 2e5e5086bc900323219c711833b02e9e23e007ce Mon Sep 17 00:00:00 2001 From: "b.nodon" Date: Thu, 2 Apr 2026 16:11:10 +0200 Subject: [PATCH 1/7] #185 formulaire admin Artiste et style. --- Webzine.Business.Contracts/IDashboardService.cs | 4 ++-- Webzine.Business/DashboardService.cs | 9 ++++----- .../Administration/Controllers/DashboardController.cs | 6 +++--- .../ViewModels/Artiste/ArtisteCreateViewModel.cs | 7 +++++-- .../ViewModels/Artiste/ArtisteEditViewModel.cs | 5 ++++- .../ViewModels/Styles/StyleCreateViewModel.cs | 2 +- .../ViewModels/Styles/StyleEditViewModel.cs | 2 +- .../Areas/Administration/Views/Artiste/Create.cshtml | 4 ++++ .../Areas/Administration/Views/Artiste/_Form.cshtml | 5 +++++ Webzine.WebApplication/Controllers/TitreController.cs | 1 - Webzine.WebApplication/Extensions/RouteConfiguration.cs | 4 ---- 11 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Webzine.Business.Contracts/IDashboardService.cs b/Webzine.Business.Contracts/IDashboardService.cs index 8bde456..423880f 100644 --- a/Webzine.Business.Contracts/IDashboardService.cs +++ b/Webzine.Business.Contracts/IDashboardService.cs @@ -1,7 +1,7 @@ -using Webzine.Business.Contracts.Dto; - namespace Webzine.Business.Contracts; +using Webzine.Business.Contracts.Dto; + /// /// Service responsable du calcul des statistiques affichées sur le tableau de bord d'administration. /// Agrège les données provenant de plusieurs repositories pour produire un résumé cohérent. diff --git a/Webzine.Business/DashboardService.cs b/Webzine.Business/DashboardService.cs index d9e9812..f1b566d 100644 --- a/Webzine.Business/DashboardService.cs +++ b/Webzine.Business/DashboardService.cs @@ -1,10 +1,9 @@ -using Webzine.Business.Contracts; -using Webzine.Entity; -using Webzine.Repository.Contracts; - namespace Webzine.Business; -using Contracts.Dto; +using Webzine.Business.Contracts; +using Webzine.Business.Contracts.Dto; +using Webzine.Entity; +using Webzine.Repository.Contracts; /// /// Implémentation de . diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs index 97f1721..79a5d6b 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/DashboardController.cs @@ -1,9 +1,9 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers; +using Microsoft.AspNetCore.Mvc; + using Webzine.Business.Contracts; using Webzine.Business.Contracts.Dto; -using Microsoft.AspNetCore.Mvc; -using Webzine.Repository.Contracts; [Area("Administration")] public class DashboardController : Controller @@ -31,7 +31,7 @@ public class DashboardController : Controller /// La vue Index du tableau de bord. public IActionResult Index() { - DashboardDTO data = dashboardService.GetDashboardData(); + DashboardDTO data = this.dashboardService.GetDashboardData(); return this.View(data); } diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs index bdb43de..68dedd6 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteCreateViewModel.cs @@ -10,12 +10,15 @@ /// /// Nom de l'artiste. /// - [Required] + [Required(ErrorMessage = "Le nom de l'auteur est obligatoire.")] + [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] public string Nom { get; set; } /// /// Biographie de l'artiste. - /// + /// * + [Required(ErrorMessage = "La biographie ne peux pas etre vide.")] + public string Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs index bf2d503..0d34c6f 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs @@ -16,12 +16,15 @@ /// /// Nom de l'artiste. /// - [Required] + [Required(ErrorMessage = "Le nom de l'auteur est obligatoire.")] + [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] + public string Nom { get; set; } /// /// Biographie de l'artiste. /// + [Required(ErrorMessage = "Le contenu de la biographie ne peut pas être vide.")] public string Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs index 86abbde..2eba907 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs @@ -14,7 +14,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style /// /// Obtient ou définit le libellé du style. /// - [Required] + [Required(ErrorMessage = "Le libelle du style est obligatoire.")] public string Libelle { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs index 093c130..671098c 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs @@ -19,7 +19,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style /// /// Obtient ou definit le libelle du style. /// - [Required] + [Required(ErrorMessage = "Le libelle du style est obligatoire.")] public string Libelle { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml index 38f842b..b9dc4ca 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Artiste/Create.cshtml @@ -11,6 +11,8 @@
+ +
@@ -19,6 +21,8 @@
+ +
diff --git a/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml index 960ad3f..c7fbf2e 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Artiste/_Form.cshtml @@ -6,6 +6,8 @@
+ +
@@ -14,7 +16,10 @@
+ +
+ diff --git a/Webzine.WebApplication/Controllers/TitreController.cs b/Webzine.WebApplication/Controllers/TitreController.cs index 384f41e..a741043 100644 --- a/Webzine.WebApplication/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Controllers/TitreController.cs @@ -39,7 +39,6 @@ namespace Webzine.WebApplication.Controllers ///
/// Identifiant du titre. /// Vue des details ou 404 si introuvable. - public IActionResult Index(int id) { this.logger.LogInformation("Demande d'affichage du detail pour le titre ID {Id}.", id); diff --git a/Webzine.WebApplication/Extensions/RouteConfiguration.cs b/Webzine.WebApplication/Extensions/RouteConfiguration.cs index d7f43b8..0b9b428 100644 --- a/Webzine.WebApplication/Extensions/RouteConfiguration.cs +++ b/Webzine.WebApplication/Extensions/RouteConfiguration.cs @@ -23,9 +23,7 @@ public static class RouteConfiguration pattern: "artiste/{nom}", defaults: new { controller = "Artiste", action = "Index" }); - // ----------- ADMIN ----------- - var adminRoutes = new Dictionary { { "artistes", "Artiste" }, { "commentaires", "Commentaire" }, { "styles", "Style" }, { "titres", "Titre" }, @@ -39,9 +37,7 @@ public static class RouteConfiguration defaults: new { area = "Administration", controller = route.Value, action = "Index" }); } - // --- AUTRE PROUTES --- - endpoints.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); From 98635ba7bf8ffde2d7106cdddded90e73c42593e Mon Sep 17 00:00:00 2001 From: "b.nodon" Date: Fri, 3 Apr 2026 09:35:35 +0200 Subject: [PATCH 2/7] #185 Message d'erreur pour les input vide. --- .../ViewModels/Titre/AdminTitreForm.cs | 13 +++++++++++++ .../Areas/Administration/Views/Titre/_Form.cshtml | 10 ++++++++++ 2 files changed, 23 insertions(+) diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs index 5305732..22c5fd9 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Titre/AdminTitreForm.cs @@ -1,5 +1,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Titre; +using System.ComponentModel.DataAnnotations; + using Microsoft.AspNetCore.Mvc.Rendering; /// @@ -15,36 +17,47 @@ public class AdminTitreForm /// /// Définit l'identifiant de l'artiste associé au titre. /// + [Required(ErrorMessage = "L'id de l'artiste est obligatoire.")] + public int IdArtiste { get; set; } /// /// Définit le titre du titre. /// + [Required(ErrorMessage = "Le labelle est obligatoire.")] + public string Libelle { get; set; } /// /// Définit le nom de l'album associé au titre. /// + [Required(ErrorMessage = "L'album est obligatoire.")] + public string Album { get; set; } /// /// Définit la chronique du titre, peut-être une critique ou une description du titre. /// + [Required(ErrorMessage = "La chronique est obligatoire.")] public string Chronique { get; set; } /// /// Définit la date de sortie du titre. /// + [Required(ErrorMessage = "La date de est obligatoire.")] + public DateTime DateSortie { get; set; } /// /// Définit la durée du titre en secondes. /// + [Required(ErrorMessage = "La durée est obligatoire.")] public int Duree { get; set; } /// /// Définit l'URL de la jaquette de l'album associé au titre. /// + [Required(ErrorMessage = "L'Url de la jaquette est obligatoire.")] public string UrlJaquette { get; set; } /// diff --git a/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml index d1f4f8c..bc44d5a 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Titre/_Form.cshtml @@ -8,6 +8,8 @@ + + @@ -16,6 +18,7 @@
+
@@ -24,6 +27,7 @@
+
@@ -34,6 +38,8 @@ + + @@ -55,6 +61,8 @@ class="form-control" type="number" min="0" /> + + seconds @@ -66,6 +74,8 @@
+ +
From acbf51a6e431ae7ddbd404b84f5f1cfa8c559e94 Mon Sep 17 00:00:00 2001 From: "m.curnillon" Date: Fri, 3 Apr 2026 15:20:48 +0200 Subject: [PATCH 3/7] Actualiser Webzine.WebApplication/appsettings.json --- Webzine.WebApplication/appsettings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Webzine.WebApplication/appsettings.json b/Webzine.WebApplication/appsettings.json index 46fd8b0..248f821 100644 --- a/Webzine.WebApplication/appsettings.json +++ b/Webzine.WebApplication/appsettings.json @@ -15,6 +15,6 @@ }, "AllowedHosts": "*", "EfPerformance": { - "SeuilMs": 10 + "SeuilMs": 60 } } \ No newline at end of file From 2550d39af5f5489c3f7484eb0abfc3acd466a758 Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:46:11 +0200 Subject: [PATCH 4/7] refactor: update namespaces and improve null handling in view models and controllers --- Webzine.Repository/DbStyleRepository.cs | 2 -- .../Administration/Controllers/ArtisteController.cs | 13 ++++++++----- .../Administration/Controllers/StyleController.cs | 4 +++- .../ViewModels/Artiste/AdminArtisteForm.cs | 4 ++-- .../ViewModels/Artiste/ArtisteEditViewModel.cs | 6 +----- .../ViewModels/Styles/StyleCreateViewModel.cs | 2 +- .../ViewModels/Styles/StyleDeleteViewModel.cs | 4 ++-- .../ViewModels/Styles/StyleEditViewModel.cs | 2 +- .../Areas/Administration/Views/Style/Create.cshtml | 2 +- .../Areas/Administration/Views/Style/Delete.cshtml | 2 +- .../Areas/Administration/Views/Style/Edit.cshtml | 2 +- Webzine.WebApplication/Program.cs | 2 +- 12 files changed, 22 insertions(+), 23 deletions(-) diff --git a/Webzine.Repository/DbStyleRepository.cs b/Webzine.Repository/DbStyleRepository.cs index 0412a90..57f42f3 100644 --- a/Webzine.Repository/DbStyleRepository.cs +++ b/Webzine.Repository/DbStyleRepository.cs @@ -94,7 +94,6 @@ public class DbStyleRepository : IStyleRepository this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id); var style = this.context.Styles - .AsNoTracking() .Include(s => s.Titres) .SingleOrDefault(s => s.IdStyle == id); @@ -123,7 +122,6 @@ public class DbStyleRepository : IStyleRepository this.logger.LogDebug("Tri des styles par libellé"); var styles = this.context.Styles - .AsNoTracking() .OrderBy(s => s.Libelle); this.logger.LogDebug("La liste de styles a été récupérée."); diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs index c68e99e..4d4311a 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs @@ -97,12 +97,15 @@ public class ArtisteController : Controller [HttpPost] public IActionResult Edit(ArtisteEditViewModel model) { - var artiste = new Artiste + var artiste = this.artisteRepository.Find(model.Id); + + if (artiste == null) { - IdArtiste = model.Id, - Nom = model.Nom, - Biographie = model.Biographie, - }; + return this.RedirectToAction("Index"); + } + + artiste.Nom = model.Nom; + artiste.Biographie = model.Biographie; this.artisteRepository.Update(artiste); diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs index 578cf4d..cb08beb 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs @@ -2,9 +2,11 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers; using Microsoft.AspNetCore.Mvc; +using ViewModels.Styles; + using Webzine.Entity; using Webzine.Repository.Contracts; -using Webzine.WebApplication.Areas.Administration.ViewModels.Style; +using Webzine.WebApplication.Areas.Administration.ViewModels.Styles; /// /// Controleur pour la gestion des styles dans l'administration du webzine. diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs index c1700cb..ee14731 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/AdminArtisteForm.cs @@ -14,11 +14,11 @@ /// /// Définit le nom de l'artiste. /// - public string Nom { get; set; } + public string? Nom { get; set; } /// /// Définit la biographie de l'artiste. /// - public string Biographie { get; set; } + public string? Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs index 0d34c6f..98b3887 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs @@ -20,11 +20,7 @@ [StringLength(50, ErrorMessage = "Le nom ne doit pas dépasser 50 caractères.")] public string Nom { get; set; } - - /// - /// Biographie de l'artiste. - /// - [Required(ErrorMessage = "Le contenu de la biographie ne peut pas être vide.")] + public string Biographie { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs index 2eba907..de912e7 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleCreateViewModel.cs @@ -2,7 +2,7 @@ // Copyright (c) Equipe 1 - BOBIN, MASI, NODON, VETU. All rights reserved. // -namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Styles { using System.ComponentModel.DataAnnotations; diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs index fc94e54..daade0d 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleDeleteViewModel.cs @@ -2,7 +2,7 @@ // Copyright (c) Equipe 1 - BOBIN, MASI, NODON, VETU. All rights reserved. // -namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Styles { /// /// ViewModel pour la suppression d'un style en administration. @@ -17,6 +17,6 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style /// /// Obtient ou définit le libellé du style. /// - public string Libelle { get; set; } + public string? Libelle { get; set; } } } \ No newline at end of file diff --git a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs index 671098c..b959456 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Styles/StyleEditViewModel.cs @@ -2,7 +2,7 @@ // Copyright (c) Equipe 1 - BOBIN, MASI, NODON, VETU. All rights reserved. // -namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style +namespace Webzine.WebApplication.Areas.Administration.ViewModels.Styles { using System.ComponentModel.DataAnnotations; diff --git a/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml index c0cb8f7..ddc0c14 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Style/Create.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.Style.StyleCreateViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Styles.StyleCreateViewModel @{ ViewData["Title"] = "Créer un style"; diff --git a/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml index 47dad12..61dce02 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Style/Delete.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.Style.StyleDeleteViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Styles.StyleDeleteViewModel @{ ViewData["Title"] = "Supprimer un style"; diff --git a/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml b/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml index 446cabe..bf57f66 100644 --- a/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml +++ b/Webzine.WebApplication/Areas/Administration/Views/Style/Edit.cshtml @@ -1,4 +1,4 @@ -@model Webzine.WebApplication.Areas.Administration.ViewModels.Style.StyleEditViewModel +@model Webzine.WebApplication.Areas.Administration.ViewModels.Styles.StyleEditViewModel @{ ViewData["Title"] = "Editer un style"; diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 32c3737..4fcbc78 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,8 +30,8 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { + // options.Filters.Add(); options.Filters.Add(); - options.Filters.Add(); }) // Ajoute la compilation des vues lors de l'execution de l'application. From 71cdf8d179c8b189d792b956ad14e9f6f5adeced Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:52:55 +0200 Subject: [PATCH 5/7] fix: improve form handling for Create and Edit actions in TitreController --- .../Controllers/TitreController.cs | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs index 3f33a2d..7607228 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs @@ -95,6 +95,33 @@ public class TitreController : Controller [HttpPost] public IActionResult Create(TitreAdminDTO model) { + if (!this.ModelState.IsValid) + { + var form = new AdminTitreForm + { + IdArtiste = model.IdArtiste, + Libelle = model.Libelle, + Album = model.Album, + Chronique = model.Chronique, + DateSortie = model.DateSortie, + Duree = model.Duree, + UrlJaquette = model.UrlJaquette, + UrlEcoute = model.UrlEcoute, + Styles = model.Styles, + Artistes = this.artisteRepository.FindAll().Select(a => new SelectListItem + { + Value = a.IdArtiste.ToString(), + Text = a.Nom, + }).ToList(), + AllStyles = this.styleRepository.FindAll().Select(s => new SelectListItem + { + Value = s.IdStyle.ToString(), + Text = s.Libelle, + }).ToList(), + }; + return this.View(form); + } + this.titreAdminService.CreerTitre(model); return this.RedirectToAction("Index"); } @@ -147,6 +174,34 @@ public class TitreController : Controller [HttpPost] public IActionResult Edit(TitreAdminDTO model) { + if (!this.ModelState.IsValid) + { + var form = new AdminTitreForm + { + Id = model.Id, + IdArtiste = model.IdArtiste, + Libelle = model.Libelle, + Album = model.Album, + Chronique = model.Chronique, + DateSortie = model.DateSortie, + Duree = model.Duree, + UrlJaquette = model.UrlJaquette, + UrlEcoute = model.UrlEcoute, + Styles = model.Styles, + Artistes = this.artisteRepository.FindAll().Select(a => new SelectListItem + { + Value = a.IdArtiste.ToString(), + Text = a.Nom, + }).ToList(), + AllStyles = this.styleRepository.FindAll().Select(s => new SelectListItem + { + Value = s.IdStyle.ToString(), + Text = s.Libelle, + }).ToList(), + }; + return this.View(form); + } + this.titreAdminService.ModifierTitre(model); return this.RedirectToAction("Index"); } From 80afb9b0bf7122a5d53d30afce064da880f2fd9d Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 16:54:46 +0200 Subject: [PATCH 6/7] fix: enable GlobalExceptionFilter in controller options --- Webzine.WebApplication/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 4fcbc78..089ee99 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,7 +30,7 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { - // options.Filters.Add(); + options.Filters.Add(); options.Filters.Add(); }) From a42b430fb34bfae08ad94f84a32549ea167cc7d6 Mon Sep 17 00:00:00 2001 From: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Fri, 3 Apr 2026 17:18:03 +0200 Subject: [PATCH 7/7] fix: disable GlobalExceptionFilter in Program.cs --- Webzine.WebApplication/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 089ee99..4fcbc78 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -30,7 +30,7 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { - options.Filters.Add(); + // options.Filters.Add(); options.Filters.Add(); })