diff --git a/Webzine.Repository/DbStyleRepository.cs b/Webzine.Repository/DbStyleRepository.cs index 8cb5120..d831ead 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 ff1fa43..c5df960 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs @@ -113,12 +113,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 5fc6067..51b9d80 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/StyleController.cs @@ -2,9 +2,10 @@ 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; /// /// Controleur pour la gestion des styles dans l'administration du webzine. diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs index f4557d6..a42bdb4 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/TitreController.cs @@ -114,6 +114,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"); } @@ -166,6 +193,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"); } 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/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..7d40252 100644 --- a/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs +++ b/Webzine.WebApplication/Areas/Administration/ViewModels/Artiste/ArtisteEditViewModel.cs @@ -16,12 +16,11 @@ /// /// 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. - /// 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..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; @@ -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/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 093c130..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; @@ -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/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/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/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/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 @@
+ +
diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 4340186..4ef5711 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -31,6 +31,7 @@ try // controllers avec des vues. builder.Services.AddControllersWithViews(options => { + // options.Filters.Add(); options.Filters.Add(); options.Filters.Add(); }); @@ -55,7 +56,7 @@ try }); builder.Services.AddSingleton(); - // En fonction de la configuration, utilise soit les repositories basés sur une base de données, soit les repositories basés sur des listes locales. + // En fonction de la configuration, utilise soit les repositories basés sur une base de données, soit les repositories basés sur des listes locales. // En fonction de la configuration, utilise soit les repositories bases sur une base de donnees, soit les repositories bases sur des listes locales. var repositoryType = builder.Configuration.GetValue("Repository"); var seederType = builder.Configuration.GetValue("Seeder"); diff --git a/Webzine.WebApplication/appsettings.json b/Webzine.WebApplication/appsettings.json index 70bc2e7..cc61318 100644 --- a/Webzine.WebApplication/appsettings.json +++ b/Webzine.WebApplication/appsettings.json @@ -26,6 +26,6 @@ }, "AllowedHosts": "*", "EfPerformance": { - "SeuilMs": 10 + "SeuilMs": 60 } } \ No newline at end of file