From 49bf4a024b4bd7238966bc645b56c758d3f00db5 Mon Sep 17 00:00:00 2001 From: Loic Masi Date: Thu, 26 Mar 2026 14:33:31 +0100 Subject: [PATCH] Refacto StyleCop --- Webzine.Repository/ArtisteRepository.cs | 15 - Webzine.Repository/DbArtisteRepository.cs | 67 ++-- Webzine.Repository/LocalArtisteRepository.cs | 51 +-- Webzine.Repository/StyleRepository.cs | 10 - Webzine.Repository/TitreRepository.cs | 104 ------ .../Controllers/ArtisteController.cs | 6 +- .../Controllers/CommentaireController.cs | 10 +- .../Controllers/AccueilController.cs | 2 - .../Controllers/ArtisteController.cs | 14 +- .../Controllers/TitreController.cs | 301 +++++++++--------- Webzine.WebApplication/Program.cs | 19 +- .../Views/Shared/_Layout.cshtml | 2 +- 12 files changed, 227 insertions(+), 374 deletions(-) delete mode 100644 Webzine.Repository/ArtisteRepository.cs delete mode 100644 Webzine.Repository/StyleRepository.cs delete mode 100644 Webzine.Repository/TitreRepository.cs diff --git a/Webzine.Repository/ArtisteRepository.cs b/Webzine.Repository/ArtisteRepository.cs deleted file mode 100644 index bd864bd..0000000 --- a/Webzine.Repository/ArtisteRepository.cs +++ /dev/null @@ -1,15 +0,0 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -namespace Webzine.Repository -{ - using Webzine.Repository.Contracts; - /// - /// Implémentation de l'interface IArtisteRepository. - /// - public class ArtisteRepository : IArtisteRepository - { - - } -} diff --git a/Webzine.Repository/DbArtisteRepository.cs b/Webzine.Repository/DbArtisteRepository.cs index 4fa8e18..9091e2a 100644 --- a/Webzine.Repository/DbArtisteRepository.cs +++ b/Webzine.Repository/DbArtisteRepository.cs @@ -1,4 +1,8 @@ -namespace Webzine.Repository +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace Webzine.Repository { using System.Data.Common; using Microsoft.EntityFrameworkCore; @@ -13,18 +17,18 @@ /// public class DbArtisteRepository : IArtisteRepository { - private WebzineDbContext _context; - private readonly ILogger _logger; + private WebzineDbContext context; + private readonly ILogger logger; /// /// Initializes a new instance of the class. /// /// Le contexte de base de données à utiliser pour accéder aux entités et effectuer des opérations de /// persistance. Ne peut pas être null. - public DbArtisteRepository(WebzineDbContext context, ILogger logger) + public DbArtisteRepository(WebzineDbContext context, ILogger logger) { - this._logger = logger; - this._context = context; + this.logger = logger; + this.context = context; } /// @@ -32,17 +36,17 @@ { try { - this._context.Artistes.Add(artiste); - this._context.SaveChanges(); + this.context.Artistes.Add(artiste); + this.context.SaveChanges(); } catch (DbUpdateException dbex) { - this._logger.LogError(dbex, "Erreur de base de données lors de l'ajout de l'artiste: {id}", artiste.IdArtiste); + this.logger.LogError(dbex, "Erreur de base de données lors de l'ajout de l'artiste: {id}", artiste.IdArtiste); throw; } catch (Exception ex) { - this._logger.LogError(ex, "Une erreur est survenue lors de l'ajout de l'artiste {Nom}.", artiste?.Nom); + this.logger.LogError(ex, "Une erreur est survenue lors de l'ajout de l'artiste {Nom}.", artiste?.Nom); throw new Exception("Une erreur est survenue lors de l'ajout de l'artiste.", ex); } } @@ -57,17 +61,17 @@ throw new ArgumentNullException(nameof(artiste), "L'artiste à supprimer ne peut pas être null."); } - this._context.Artistes.Remove(artiste); - this._context.SaveChanges(); + this.context.Artistes.Remove(artiste); + this.context.SaveChanges(); } catch (DbUpdateException dbex) { - this._logger.LogError(dbex, "Erreur de base de données lors de la suppression de l'artiste: {Id}", artiste.IdArtiste); + this.logger.LogError(dbex, "Erreur de base de données lors de la suppression de l'artiste: {Id}", artiste.IdArtiste); throw; } catch (Exception ex) { - this._logger.LogError(ex, "Une erreur est survenue lors de la suppression de l'artiste {Nom}.", artiste?.Nom); + this.logger.LogError(ex, "Une erreur est survenue lors de la suppression de l'artiste {Nom}.", artiste?.Nom); throw new Exception("Une erreur est survenue lors de la suppression de l'artiste.", ex); } } @@ -77,14 +81,14 @@ { try { - Artiste artiste = this._context.Artistes + Artiste artiste = this.context.Artistes .Include(a => a.Titres) .First(a => a.IdArtiste == id); return artiste; } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la recherche de l'artiste: {Id}", id); + this.logger.LogError(ex, "Erreur lors de la recherche de l'artiste: {Id}", id); throw; } } @@ -94,20 +98,21 @@ { try { - var artiste = this._context.Artistes - .Include(a => a.Titres) - .FirstOrDefault(a => a.Nom == nom); + var artiste = this.context.Artistes + .Include(a => a.Titres) + .FirstOrDefault(a => a.Nom == nom); - if (artiste == null) + if (artiste == null) { - this._logger.LogWarning("Pas d'artiste au nom {Nom}", nom); + this.logger.LogWarning("Pas d'artiste au nom {Nom}", nom); artiste = new Artiste(); } - return artiste; + + return artiste; } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la recherche de l'artiste avec le nom: {Nom}", nom); + this.logger.LogError(ex, "Erreur lors de la recherche de l'artiste avec le nom: {Nom}", nom); throw; } } @@ -118,13 +123,13 @@ try { // .AsNoTracking() rend la requête beaucoup plus rapide pour de la lecture - var artistes = this._context.Artistes.AsNoTracking().ToList(); - this._logger.LogInformation("{Count} artistes récupérés de la base.", artistes.Count); + var artistes = this.context.Artistes.AsNoTracking().ToList(); + this.logger.LogInformation("{Count} artistes récupérés de la base.", artistes.Count); return artistes; } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la récupération de tous les artistes."); + this.logger.LogError(ex, "Erreur lors de la récupération de tous les artistes."); return Enumerable.Empty(); // Retourne une liste vide au lieu de faire crash l'UI } } @@ -139,18 +144,18 @@ try { - this._context.Artistes.Update(artiste); - this._context.SaveChanges(); - this._logger.LogInformation("Artiste {Id} ({Nom}) mis à jour avec succès.", artiste.IdArtiste, artiste.Nom); + this.context.Artistes.Update(artiste); + this.context.SaveChanges(); + this.logger.LogInformation("Artiste {Id} ({Nom}) mis à jour avec succès.", artiste.IdArtiste, artiste.Nom); } catch (DbUpdateException ex) { - this._logger.LogError(ex, "Erreur de base de données lors de la mise à jour de l'artiste ID: {IdArtiste}", artiste.IdArtiste); + this.logger.LogError(ex, "Erreur de base de données lors de la mise à jour de l'artiste ID: {IdArtiste}", artiste.IdArtiste); throw; } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la mise à jour de l'artiste {Id}.", artiste.IdArtiste); + this.logger.LogError(ex, "Erreur lors de la mise à jour de l'artiste {Id}.", artiste.IdArtiste); throw; } } diff --git a/Webzine.Repository/LocalArtisteRepository.cs b/Webzine.Repository/LocalArtisteRepository.cs index 36b30c9..8381b86 100644 --- a/Webzine.Repository/LocalArtisteRepository.cs +++ b/Webzine.Repository/LocalArtisteRepository.cs @@ -1,4 +1,8 @@ -namespace Webzine.Repository +// +// Copyright (c) PlaceholderCompany. All rights reserved. +// + +namespace Webzine.Repository { using Microsoft.Extensions.Logging; using Webzine.Entity; @@ -10,8 +14,8 @@ /// public class LocalArtisteRepository : IArtisteRepository { - private readonly ILogger _logger; - private readonly List _artistes; + private readonly ILogger logger; + private readonly List artistes; /// /// Initializes a new instance of the class. @@ -21,8 +25,8 @@ /// Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null. public LocalArtisteRepository(List artistes, ILogger logger) { - this._logger = logger; - this._artistes = artistes; + this.logger = logger; + this.artistes = artistes; } /// @@ -30,18 +34,18 @@ { try { - if (this._artistes.Any(a => a.IdArtiste == artiste.IdArtiste)) + if (this.artistes.Any(a => a.IdArtiste == artiste.IdArtiste)) { - this._logger.LogWarning("Un artiste avec l'ID {Id} existe déjà. L'ajout est ignoré.", artiste.IdArtiste); + this.logger.LogWarning("Un artiste avec l'ID {Id} existe déjà. L'ajout est ignoré.", artiste.IdArtiste); return; } - this._artistes.Add(artiste); - this._logger.LogInformation("Artiste ajouté : {Nom}", artiste.Nom); + this.artistes.Add(artiste); + this.logger.LogInformation("Artiste ajouté : {Nom}", artiste.Nom); } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de l'ajout de l'artiste : {Nom}", artiste?.Nom); + this.logger.LogError(ex, "Erreur lors de l'ajout de l'artiste : {Nom}", artiste?.Nom); throw; } } @@ -51,12 +55,12 @@ { try { - this._artistes.Remove(artiste); - this._logger.LogInformation("Artiste supprimé : {Nom}", artiste.Nom); + this.artistes.Remove(artiste); + this.logger.LogInformation("Artiste supprimé : {Nom}", artiste.Nom); } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la suppression de l'artiste : {Nom}", artiste.Nom); + this.logger.LogError(ex, "Erreur lors de la suppression de l'artiste : {Nom}", artiste.Nom); throw; } } @@ -66,12 +70,12 @@ { try { - Artiste artiste = this._artistes.First(a => a.IdArtiste == id); + Artiste artiste = this.artistes.First(a => a.IdArtiste == id); return artiste; } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la recherche de l'artiste avec ID: {Id}", id); + this.logger.LogError(ex, "Erreur lors de la recherche de l'artiste avec ID: {Id}", id); throw; } } @@ -81,22 +85,21 @@ { try { - Artiste artiste = this._artistes.First(a => a.Nom == nom); + Artiste artiste = this.artistes.First(a => a.Nom == nom); return artiste; } catch (Exception ex) { - this._logger.LogError(ex, "Erreur lors de la recherche de l'artiste avec le nom: {Nom}", nom); - throw; + this.logger.LogError(ex, "Erreur lors de la recherche de l'artiste avec le nom: {Nom}", nom); + throw; } - } /// /// La liste retournée est une copie de la liste interne, donc elle ne peut être nulle. public IEnumerable FindAll() { - return this._artistes; + return this.artistes; } /// @@ -104,7 +107,7 @@ { try { - var artisteToUpdate = this._artistes.FirstOrDefault(a => a.IdArtiste == artiste.IdArtiste); + var artisteToUpdate = this.artistes.FirstOrDefault(a => a.IdArtiste == artiste.IdArtiste); if (artisteToUpdate != null) { @@ -112,17 +115,17 @@ artisteToUpdate.Biographie = artiste.Biographie; artisteToUpdate.Titres = artiste.Titres; - this._logger.LogInformation("Artiste {Id} mis à jour avec succès.", artiste.IdArtiste); + this.logger.LogInformation("Artiste {Id} mis à jour avec succès.", artiste.IdArtiste); } else { - this._logger.LogWarning("Mise à jour impossible : l'artiste avec l'ID {Id} n'existe pas.", artiste.IdArtiste); + this.logger.LogWarning("Mise à jour impossible : l'artiste avec l'ID {Id} n'existe pas.", artiste.IdArtiste); throw new KeyNotFoundException($"L'artiste {artiste.IdArtiste} est introuvable."); } } catch (Exception ex) { - this._logger.LogError(ex, "Une erreur est survenue lors de la mise à jour de l'artiste {Id}.", artiste.IdArtiste); + this.logger.LogError(ex, "Une erreur est survenue lors de la mise à jour de l'artiste {Id}.", artiste.IdArtiste); throw; } } diff --git a/Webzine.Repository/StyleRepository.cs b/Webzine.Repository/StyleRepository.cs deleted file mode 100644 index 1832f5e..0000000 --- a/Webzine.Repository/StyleRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Webzine.Repository -{ - internal class StyleRepository - { - } -} diff --git a/Webzine.Repository/TitreRepository.cs b/Webzine.Repository/TitreRepository.cs deleted file mode 100644 index 2dc0562..0000000 --- a/Webzine.Repository/TitreRepository.cs +++ /dev/null @@ -1,104 +0,0 @@ -// -// Copyright (c) PlaceholderCompany. All rights reserved. -// - -namespace Webzine.Repository -{ - using Microsoft.EntityFrameworkCore; - using Webzine.EntitiesContext; - using Webzine.Entity; - using Webzine.Repository.Contracts; - - /// - /// Implémentation de l'interface ITitreRepository. - /// - public class TitreRepository : ITitreRepository - { - private readonly WebzineDbContext context; - - /// - /// Initializes a new instance of the class. - /// - public TitreRepository(WebzineDbContext context) - { - this.context = context; - } - - /// - /// Rechercher un titre à l'aide de son nom. - /// - /// Nom de la musique. - /// IEnumerable Titre. - public IEnumerable Search(string mot) - { - if (string.IsNullOrWhiteSpace(mot)) - { - return Enumerable.Empty(); - } - - return this.context.Titres - .Where(t => !string.IsNullOrWhiteSpace(t.Libelle) - && t.Libelle.ToLower().Contains(mot.ToLower())) - .OrderBy(t => t.Libelle) - .ToList(); - } - - /// - /// Retourne le titre demandé à partir de son identifiant. - /// - /// Id du titre cherché. - /// Un titre. - public Titre? Find(int idTitre) - { - var find = this.context.Titres - .Where(t => t.IdTitre == idTitre) - .First(); - - return find; - } - - /// - /// Retourne les titres demandés (pour la pagination) triés - /// selon la date de création(du plus récent à ancien). - /// - /// IEnumerable de Titre. - public IEnumerable FindTitres( - int offset, - int limit) - { - return this.context.Titres - .OrderByDescending(t => t.DateCreation) - .Include(t => t.Artiste) - .Skip((offset - 1) * limit) - .Take(limit) - .ToList(); - } - - /// - /// Retourne tous les titres. - /// - /// Liste de Titre. - public IEnumerable FindAll() - { - return this.context.Titres - .AsNoTracking() - .Include(t => t.Artiste) - .OrderByDescending(t => t.DateCreation) - .ToList(); - } - - /// - /// Trouver les titres correspondant à un style. - /// - /// Style de musique recherché. - /// IEnumerable Titre. - public IEnumerable SearchByStyle(string libelle) - { - return this.context.Titres - .Where(t => t.Styles.Any(s => !string.IsNullOrWhiteSpace(s.Libelle) - && s.Libelle.ToLower().Contains(libelle.ToLower()))) - .OrderBy(t => t.Libelle) - .ToList(); - } - } -} diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs index 13266c2..1e34b15 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs @@ -10,7 +10,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers; public class ArtisteController : Controller { // Injection du logger via le constructeur - private readonly ILogger _logger; + private readonly ILogger logger; private readonly IArtisteRepository _artisteRepository; private readonly List _artistes = new List(); @@ -18,8 +18,8 @@ public class ArtisteController : Controller public ArtisteController(ILogger logger, IArtisteRepository artisteRepository) { - this._logger = logger; - this._logger.LogDebug(1, "initialisation du ArtisteController d'administration"); + this.logger = logger; + this.logger.LogDebug(1, "initialisation du ArtisteController d'administration"); this._artisteRepository = artisteRepository; this._artistes.AddRange(this._artisteRepository.FindAll()); } diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs index 236bfb7..0f16425 100644 --- a/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs +++ b/Webzine.WebApplication/Areas/Administration/Controllers/CommentaireController.cs @@ -8,7 +8,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers [Area("Administration")] public class CommentaireController : Controller { - private readonly ILogger _logger; + private readonly ILogger logger; private readonly List _commentaires; /// @@ -19,9 +19,9 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers /// Service de journalisation injecté. public CommentaireController(ILogger logger) { - this._logger = logger; + this.logger = logger; - this._logger.LogInformation("Initialisation du contrôleur CommentaireController."); + this.logger.LogInformation("Initialisation du contrôleur CommentaireController."); var factory = new DataFactory(); // TODO injecter le factory via DI pour éviter de le recréer à chaque fois // faire une classe statique @@ -32,7 +32,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers _commentaires = factory.GenerateCommentaires(50, _titres); - this._logger.LogInformation("Données fictives générées avec succès."); + this.logger.LogInformation("Données fictives générées avec succès."); } /// @@ -65,7 +65,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers if (commentaire == null) { - this._logger.LogWarning("Commentaire avec ID {Id} introuvable pour suppression.", id); + this.logger.LogWarning("Commentaire avec ID {Id} introuvable pour suppression.", id); return RedirectToAction("Index"); } diff --git a/Webzine.WebApplication/Controllers/AccueilController.cs b/Webzine.WebApplication/Controllers/AccueilController.cs index f405036..51cdb84 100644 --- a/Webzine.WebApplication/Controllers/AccueilController.cs +++ b/Webzine.WebApplication/Controllers/AccueilController.cs @@ -2,8 +2,6 @@ // Copyright (c) Equipe 1 - . All rights reserved. // -using Webzine.Repository.Contracts; - namespace Webzine.WebApplication.Controllers { using Microsoft.AspNetCore.Mvc; diff --git a/Webzine.WebApplication/Controllers/ArtisteController.cs b/Webzine.WebApplication/Controllers/ArtisteController.cs index b63f140..6f395d2 100644 --- a/Webzine.WebApplication/Controllers/ArtisteController.cs +++ b/Webzine.WebApplication/Controllers/ArtisteController.cs @@ -8,7 +8,7 @@ public class ArtisteController : Controller { // Injection du logger via le constructeur - private readonly ILogger _logger; + private readonly ILogger logger; private readonly IArtisteRepository _artisteRepository; /// @@ -18,8 +18,8 @@ public ArtisteController(ILogger logger, IArtisteRepository artisteRepository) { - this._logger = logger; - this._logger.LogDebug("Initialisation du ArtisteController"); + this.logger = logger; + this.logger.LogDebug("Initialisation du ArtisteController"); this._artisteRepository = artisteRepository; } @@ -31,11 +31,11 @@ [HttpGet("/artiste/{nom}")] public IActionResult Index(string nom) { - this._logger.LogInformation("Tentative d'accès à l'artiste avec le nom : {NomArtiste}", nom); + this.logger.LogInformation("Tentative d'accès à l'artiste avec le nom : {NomArtiste}", nom); if (string.IsNullOrEmpty(nom)) { - this._logger.LogWarning("Nom de l'artiste manquant dans la requête."); + this.logger.LogWarning("Nom de l'artiste manquant dans la requête."); return RedirectToAction("Index"); } @@ -48,7 +48,7 @@ if (artiste == null) { - this._logger.LogWarning("Artiste non trouvé pour le nom : {NomArtiste}", nomPropre); + this.logger.LogWarning("Artiste non trouvé pour le nom : {NomArtiste}", nomPropre); return RedirectToAction("Index"); } var viewModel = new ArtisteDetailsViewModel @@ -63,7 +63,7 @@ .OrderBy(g => g.Key), }; - this._logger.LogInformation("Artiste trouvé : {NomArtiste}", nom); + this.logger.LogInformation("Artiste trouvé : {NomArtiste}", nom); return View(viewModel); } diff --git a/Webzine.WebApplication/Controllers/TitreController.cs b/Webzine.WebApplication/Controllers/TitreController.cs index 8153d61..b1f628c 100644 --- a/Webzine.WebApplication/Controllers/TitreController.cs +++ b/Webzine.WebApplication/Controllers/TitreController.cs @@ -1,182 +1,171 @@ -using Microsoft.AspNetCore.Mvc; -using Webzine.Entity; -using Webzine.Repository.Contracts; -using Webzine.WebApplication.ViewModels.Titre; +// +// Copyright (c) Equipe 1 - . All rights reserved. +// -namespace Webzine.WebApplication.Controllers; - -/// -/// Controleur responsable de la gestion des titres musicaux : -/// affichage des details, filtrage par style, -/// ajout de likes, commentaires et recherche. -/// -[Route("titre")] -public class TitreController : Controller +namespace Webzine.WebApplication.Controllers { - private readonly ILogger logger; - private readonly ITitreRepository titreRepository; + using Microsoft.AspNetCore.Mvc; + using Webzine.Entity; + using Webzine.Repository.Contracts; + using Webzine.WebApplication.ViewModels.Titre; /// - /// Initialise une nouvelle instance de la classe . + /// Controleur responsable de la gestion des titres musicaux : + /// affichage des details, filtrage par style, + /// ajout de likes, commentaires et recherche. /// - /// Service de journalisation injecte. - /// Repository des titres injecte. - public TitreController(ILogger logger, ITitreRepository titreRepository) + [Route("titre")] + public class TitreController : Controller { - this.logger = logger; - this.titreRepository = titreRepository; + private readonly ILogger logger; + private readonly ITitreRepository titreRepository; - this.logger.LogInformation("Initialisation du controleur TitreController."); - } - - /// - /// Affiche le detail d'un titre specifique. - /// - /// Identifiant du titre. - /// Vue des details ou 404 si introuvable. - [HttpGet("{id}")] - public IActionResult Details(int id) - { - this.logger.LogInformation("Demande d'affichage du detail pour le titre ID {Id}.", id); - - var titre = this.titreRepository.Find(id); - - if (titre == null) + /// + /// Initialise une nouvelle instance de la classe . + /// + /// Service de journalisation injecte. + /// Repository des titres injecte. + public TitreController(ILogger logger, ITitreRepository titreRepository) { - this.logger.LogWarning("Titre avec ID {Id} introuvable.", id); - return this.RedirectToAction("Index"); + this.logger = logger; + this.titreRepository = titreRepository; + + this.logger.LogInformation("Initialisation du controleur TitreController."); } - var vm = new TitreDetail + /// + /// Affiche le detail d'un titre specifique. + /// + /// Identifiant du titre. + /// Vue des details ou 404 si introuvable. + [HttpGet("{id}")] + public IActionResult Details(int id) { - Details = new TitreContent + this.logger.LogInformation("Demande d'affichage du detail pour le titre ID {Id}.", id); + + var titre = this.titreRepository.Find(id); + + if (titre == null) { - IdTitre = titre.IdTitre, - Libelle = titre.Libelle, - Chronique = titre.Chronique, - DateSortie = titre.DateSortie, - NbLikes = titre.NbLikes, - UrlJaquette = titre.UrlJaquette, - UrlEcoute = titre.UrlEcoute, - ArtisteNom = titre.Artiste.Nom, - Styles = titre.Styles, - Commentaires = titre.Commentaires, - }, - CommentForm = new TitreComment + this.logger.LogWarning("Titre avec ID {Id} introuvable.", id); + return this.RedirectToAction("Index"); + } + + var vm = new TitreDetail { - IdTitre = titre.IdTitre, - }, - }; + Details = new TitreContent + { + IdTitre = titre.IdTitre, + Libelle = titre.Libelle, + Chronique = titre.Chronique, + DateSortie = titre.DateSortie, + NbLikes = titre.NbLikes, + UrlJaquette = titre.UrlJaquette, + UrlEcoute = titre.UrlEcoute, + ArtisteNom = titre.Artiste.Nom, + Styles = titre.Styles, + Commentaires = titre.Commentaires, + }, + CommentForm = new TitreComment + { + IdTitre = titre.IdTitre, + }, + }; - return this.View(vm); - } - - /// - /// Affiche les titres correspondant a un style musical donne. - /// - /// Nom du style musical. - /// Vue contenant la liste filtree. - [HttpGet("style/{style}")] - public IActionResult Style(string style) - { - this.logger.LogInformation("Recherche des titres pour le style : {Style}.", style); - -<<<<<<< HEAD - var titresFiltres = this.titreRepository.SearchByStyle(style).ToList(); -======= - var titresFiltres = this._titreRepository.SearchByStyle(style).ToList(); ->>>>>>> origin/j2/refactor/controler-style-titre - - var vm = new TitreStyle - { - StyleName = style, - Titres = titresFiltres.Select(MapTitreItem).ToList(), - }; - - return this.View(vm); - } - - /// - /// Ajoute un like a un titre. - /// - /// Modele contenant l'identifiant du titre. - /// Redirection vers la page detail. - [HttpPost("like")] - public IActionResult Like(TitreLike model) - { - this.logger.LogInformation("Ajout d'un like pour le titre ID {Id}.", model.IdTitre); - - var titre = this.titreRepository.Find(model.IdTitre); - - if (titre == null) - { -<<<<<<< HEAD - this.logger.LogWarning("Impossible d'ajouter un like. Titre ID {Id} introuvable.", model.IdTitre); -======= - this._logger.LogWarning("Impossible d'ajouter un like. Titre ID {Id} introuvable.", model.IdTitre); ->>>>>>> origin/j2/refactor/controler-style-titre - return this.RedirectToAction("Index"); + return this.View(vm); } - titre.NbLikes++; - - return this.RedirectToAction("Details", new { id = model.IdTitre }); - } - - /// - /// Ajoute un commentaire a un titre. - /// - /// Donnees du commentaire. - /// Redirection vers la page detail. - [HttpPost("comment")] - public IActionResult Comment(TitreComment model) - { - if (!this.ModelState.IsValid) + /// + /// Affiche les titres correspondant a un style musical donne. + /// + /// Nom du style musical. + /// Vue contenant la liste filtree. + [HttpGet("style/{style}")] + public IActionResult Style(string style) { -<<<<<<< HEAD - this.logger.LogWarning("Echec de validation du modele de commentaire pour le titre ID {Id}.", model.IdTitre); -======= - this._logger.LogWarning("Echec de validation du modele de commentaire pour le titre ID {Id}.", model.IdTitre); ->>>>>>> origin/j2/refactor/controler-style-titre + this.logger.LogInformation("Recherche des titres pour le style : {Style}.", style); + + var titresFiltres = this.titreRepository.SearchByStyle(style).ToList(); + + var vm = new TitreStyle + { + StyleName = style, + Titres = titresFiltres.Select(MapTitreItem).ToList(), + }; + + return this.View(vm); + } + + /// + /// Ajoute un like a un titre. + /// + /// Modele contenant l'identifiant du titre. + /// Redirection vers la page detail. + [HttpPost("like")] + public IActionResult Like(TitreLike model) + { + this.logger.LogInformation("Ajout d'un like pour le titre ID {Id}.", model.IdTitre); + + var titre = this.titreRepository.Find(model.IdTitre); + + if (titre == null) + { + this.logger.LogWarning("Impossible d'ajouter un like. Titre ID {Id} introuvable.", model.IdTitre); + return this.RedirectToAction("Index"); + } + + titre.NbLikes++; + return this.RedirectToAction("Details", new { id = model.IdTitre }); } - var titre = this.titreRepository.Find(model.IdTitre); - - if (titre == null) + /// + /// Ajoute un commentaire a un titre. + /// + /// Donnees du commentaire. + /// Redirection vers la page detail. + [HttpPost("comment")] + public IActionResult Comment(TitreComment model) { -<<<<<<< HEAD - this.logger.LogWarning("Impossible d'ajouter le commentaire. Titre ID {Id} introuvable.", model.IdTitre); -======= - this._logger.LogWarning("Impossible d'ajouter le commentaire. Titre ID {Id} introuvable.", model.IdTitre); ->>>>>>> origin/j2/refactor/controler-style-titre - return this.RedirectToAction("Index"); + if (!this.ModelState.IsValid) + { + this.logger.LogWarning("Echec de validation du modele de commentaire pour le titre ID {Id}.", model.IdTitre); + return this.RedirectToAction("Details", new { id = model.IdTitre }); + } + + var titre = this.titreRepository.Find(model.IdTitre); + + if (titre == null) + { + this.logger.LogWarning("Impossible d'ajouter le commentaire. Titre ID {Id} introuvable.", model.IdTitre); + return this.RedirectToAction("Index"); + } + + var commentaire = new Commentaire + { + Auteur = model.Auteur, + Contenu = model.Contenu, + DateCreation = DateTime.Now, + IdTitre = model.IdTitre, + }; + + titre.Commentaires.Add(commentaire); + + this.logger.LogInformation("Commentaire ajoute avec succes au titre ID {Id}.", model.IdTitre); + + return this.RedirectToAction("Details", new { id = model.IdTitre }); } - var commentaire = new Commentaire + private static TitreStyleItem MapTitreItem(Titre titre) { - Auteur = model.Auteur, - Contenu = model.Contenu, - DateCreation = DateTime.Now, - IdTitre = model.IdTitre, - }; - - titre.Commentaires.Add(commentaire); - - this.logger.LogInformation("Commentaire ajoute avec succes au titre ID {Id}.", model.IdTitre); - - return this.RedirectToAction("Details", new { id = model.IdTitre }); - } - - private static TitreStyleItem MapTitreItem(Titre titre) - { - return new TitreStyleItem - { - IdTitre = titre.IdTitre, - Libelle = titre.Libelle, - ArtisteNom = titre.Artiste?.Nom, - UrlJaquette = titre.UrlJaquette, - Duree = titre.Duree, - }; + return new TitreStyleItem + { + IdTitre = titre.IdTitre, + Libelle = titre.Libelle, + ArtisteNom = titre.Artiste?.Nom, + UrlJaquette = titre.UrlJaquette, + Duree = titre.Duree, + }; + } } } diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 7a4317a..5086f9f 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -1,6 +1,6 @@ +using Microsoft.EntityFrameworkCore; using NLog; using NLog.Web; -using Microsoft.EntityFrameworkCore; using Webzine.EntitiesContext; using Webzine.Repository; using Webzine.Repository.Contracts; @@ -21,19 +21,9 @@ try // Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. .AddRazorRuntimeCompilation(); - // A utiliser en mode repo - - // builder.Services.AddSingleton(); - - // A utiliser en mode DB - builder.Services.AddScoped(); - builder.Services.AddDbContext(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection"))); - // Ajout d'un seeder pour la base de donn�es - builder.Services.AddScoped(); - // NLog: Setup NLog for Dependency injection builder.Logging.ClearProviders(); builder.Host.UseNLog(); @@ -45,17 +35,16 @@ try builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); - //builder.Services.AddScoped(); + // builder.Services.AddScoped(); } else { builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); - //builder.Services.AddScoped(); + // builder.Services.AddScoped(); } - // https://learn.microsoft.com/fr-fr/aspnet/core/performance/response-compression?view=aspnetcore-10.0#configuration // Ajoute le service de compression des réponses HTTP pour réduire la taille des données envoyées au client et améliorer les performances de l'application. builder.Services.AddResponseCompression(); @@ -80,8 +69,6 @@ try var db = scope.ServiceProvider.GetRequiredService(); db.Database.EnsureDeleted(); db.Database.EnsureCreated(); - var repo = scope.ServiceProvider.GetRequiredService(); - repo.SeedBaseDeDonnees(); } // Active le middleware permettant le routage des requetes entrantes. diff --git a/Webzine.WebApplication/Views/Shared/_Layout.cshtml b/Webzine.WebApplication/Views/Shared/_Layout.cshtml index 5d11de0..39ae5eb 100644 --- a/Webzine.WebApplication/Views/Shared/_Layout.cshtml +++ b/Webzine.WebApplication/Views/Shared/_Layout.cshtml @@ -19,7 +19,7 @@ @if(ViewContext.RouteData.Values["area"]?.ToString() != "Administration") { - @await Component.InvokeAsync("Sidebar") + @await Component.InvokeAsync("Components.Sidebar.Default") }