This commit is contained in:
josephine.vetu
2026-03-31 13:53:42 +02:00
parent 727d29889a
commit b2dc449adb
11 changed files with 30 additions and 21 deletions

View File

@@ -4,7 +4,7 @@ namespace Webzine.Repository.Contracts
/// <summary> /// <summary>
/// Défini une interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes. /// Défini une interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
/// </summary> /// </summary> // TODO interface n'est pas que liée à la bdd, elle est aussi utilisée pour la gestion en mémoire
public interface IArtisteRepository public interface IArtisteRepository
{ {
/// <summary> /// <summary>

View File

@@ -13,7 +13,7 @@ namespace Webzine.Repository
/// <summary> /// <summary>
/// Initialise une classe <see cref="DbArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes. /// Initialise une classe <see cref="DbArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
/// Utilise <see cref="IArtisteRepository"/> en injection de dépendances. /// Utilise <see cref="IArtisteRepository"/> en injection de dépendances. // TODO commentaire faux.
/// </summary> /// </summary>
public class DbArtisteRepository : IArtisteRepository public class DbArtisteRepository : IArtisteRepository
{ {

View File

@@ -93,10 +93,10 @@ public class DbStyleRepository : IStyleRepository
{ {
this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id); this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id);
if (id <= 0) if (id <= 0) // TODO à supprimer, c'est au controller de vérifier la validité de l'id
{ {
this.logger.LogWarning("Tentative de recherche d'un style avec un Id invalide: {Id}", id); this.logger.LogWarning("Tentative de recherche d'un style avec un Id invalide: {Id}", id);
return new Style(); return new Style(); // TODO pas de retour d'objet vide
} }
this.logger.LogDebug("Préparation de la requête avec inclusion des titres"); this.logger.LogDebug("Préparation de la requête avec inclusion des titres");

View File

@@ -33,7 +33,7 @@ public class DbTitreRepository : ITitreRepository
try try
{ {
this.logger.LogInformation("Ajout d'un nouveau titre: {Libelle}", titre.Libelle); this.logger.LogInformation("Ajout d'un nouveau titre: {Libelle}", titre.Libelle);
this.logger.LogDebug("Début de l'ajout du titre en base de données"); this.logger.LogDebug("Début de l'ajout du titre en base de données"); // TODO trop de logs
this.context.Titres.Add(titre); this.context.Titres.Add(titre);
this.context.SaveChanges(); this.context.SaveChanges();
@@ -288,7 +288,7 @@ public class DbTitreRepository : ITitreRepository
{ {
try try
{ {
this.logger.LogDebug("Récupération de tous les titres"); this.logger.LogDebug("Récupération de tous les titres"); // TODO trop de logs
this.logger.LogDebug("Préparation de la requête avec les inclusions Artiste et Styles"); this.logger.LogDebug("Préparation de la requête avec les inclusions Artiste et Styles");
var titres = this.context.Titres var titres = this.context.Titres

View File

@@ -11,20 +11,20 @@ namespace Webzine.Repository
/// <summary> /// <summary>
/// Initialise une classe <see cref="LocalArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes. /// Initialise une classe <see cref="LocalArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
/// Utilise <see cref="IArtisteRepository"/> en injection de dépendances. /// Utilise <see cref="IArtisteRepository"/> en injection de dépendances. // TODO faux.
/// </summary> /// </summary>
public class LocalArtisteRepository : IArtisteRepository public class LocalArtisteRepository : IArtisteRepository
{ {
private readonly ILogger<LocalArtisteRepository> logger; private readonly ILogger<LocalArtisteRepository> logger;
// private readonly List<Artiste> artistes; // private readonly List<Artiste> artistes; // TODO code mort
private readonly InMemoryDataStore dataStore; private readonly InMemoryDataStore dataStore;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class. /// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
/// Est liéee à une liste d'artistes en local et utilise un logger pour enregistrer les opérations effectuées sur les artistes. /// Est liéee à une liste d'artistes en local et utilise un logger pour enregistrer les opérations effectuées sur les artistes.
/// </summary> /// </summary>
/// <param name="artistes">La liste des artistes à initialiser. Ne peut pas être null.</param> /// <param name="artistes">La liste des artistes à initialiser. Ne peut pas être null.</param> // TODO pas le bon paramètre
/// <param name="logger">Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null.</param> /// <param name="logger">Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null.</param>
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger) public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
{ {
@@ -37,7 +37,7 @@ namespace Webzine.Repository
/// <inheritdoc/> /// <inheritdoc/>
public void Add(Artiste artiste) public void Add(Artiste artiste)
{ {
throw new NotSupportedException("Mode Local"); throw new NotSupportedException("Mode Local"); // TODO à implémenter
} }
/// <inheritdoc/> /// <inheritdoc/>
@@ -52,7 +52,7 @@ namespace Webzine.Repository
var artiste = this.dataStore.Artistes.First(a => a.IdArtiste == id); var artiste = this.dataStore.Artistes.First(a => a.IdArtiste == id);
if (artiste == null) if (artiste == null)
{ {
return new Artiste(); return new Artiste(); // TODO ne pas retourner un objet vide, FirstOrDefault et gérer le null dans le controller
} }
return artiste; return artiste;

View File

@@ -38,7 +38,7 @@ namespace Webzine.Repository
/// <inheritdoc/> /// <inheritdoc/>
public void Add(Commentaire commentaire) public void Add(Commentaire commentaire)
{ {
throw new NotSupportedException("Mode Local"); throw new NotSupportedException("Mode Local"); // TODO à implémenter
} }
/// <inheritdoc/> /// <inheritdoc/>

View File

@@ -34,7 +34,9 @@ public class LocalTitreRepository : ITitreRepository
/// <inheritdoc/> /// <inheritdoc/>
public int Count() public int Count()
{ {
var count = this.dataStore.Titres.Count(); var count = this.dataStore.Titres.Count(); // TODO une seule ligne, et attention car les deux méthodes s'appelent pareil,
// il faut faire attention à ne pas confondre avec la méthode Count() de l'interface ITitreRepository
return count; return count;
} }
@@ -62,14 +64,14 @@ public class LocalTitreRepository : ITitreRepository
/// <inheritdoc/> /// <inheritdoc/>
public void IncrementNbLikes(Titre titre) public void IncrementNbLikes(Titre titre)
{ {
titre.NbLikes++; titre.NbLikes++; // TODO rien n'est enregistré
} }
/// <inheritdoc/> /// <inheritdoc/>
public IEnumerable<Titre> Search(string mot) public IEnumerable<Titre> Search(string mot)
{ {
return this.dataStore.Titres return this.dataStore.Titres
.Where(t => t.Libelle != null && t.Libelle.Contains(mot)); .Where(t => t.Libelle != null && t.Libelle.Contains(mot)); // TODO attention au null, et à la casse, et à l'indexation pour les performances
} }
/// <inheritdoc/> /// <inheritdoc/>

View File

@@ -6,7 +6,7 @@ using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels; using Webzine.WebApplication.Areas.Administration.ViewModels;
[Area("Administration")] [Area("Administration")]
public class DashboardController : Controller public class DashboardController : Controller // TODO à refaire
{ {
private readonly ILogger<DashboardController> logger; private readonly ILogger<DashboardController> logger;
private readonly IStyleRepository styleRepository; private readonly IStyleRepository styleRepository;

View File

@@ -9,12 +9,21 @@ namespace Webzine.WebApplication.Controllers
using Webzine.Repository.Contracts; using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Recherche; using Webzine.WebApplication.ViewModels.Recherche;
/// <summary>
/// Controller de la page de recherche d'artistes et de titres.
/// </summary>
public class RechercheController : Controller public class RechercheController : Controller
{ {
private readonly ILogger<RechercheController> logger; private readonly ILogger<RechercheController> logger;
private readonly ITitreRepository titreRepository; private readonly ITitreRepository titreRepository;
private readonly IArtisteRepository artisteRepository; private readonly IArtisteRepository artisteRepository;
/// <summary>
/// Constructeur du controller de la page de recherche d'artistes et de titres.
/// </summary>
/// <param name="logger">Le logger pour enregistrer les événements.</param>
/// <param name="titreRepository">Le repository pour gérer les opérations sur les titres.</param>
/// <param name="artisteRepository">Le repository pour gérer les opérations sur les artistes.</param>
public RechercheController( public RechercheController(
ILogger<RechercheController> logger, ILogger<RechercheController> logger,
ITitreRepository titreRepository, ITitreRepository titreRepository,
@@ -29,7 +38,7 @@ namespace Webzine.WebApplication.Controllers
/// Affichage de la page Recherche depuis le header de l'app. /// Affichage de la page Recherche depuis le header de l'app.
/// </summary> /// </summary>
/// <param name="mot">Nom d'artiste ou de titre.</param> /// <param name="mot">Nom d'artiste ou de titre.</param>
/// <returns>Page de recherche avec les résultats.</returns> /// <returns>Page de recherche avec les r<EFBFBD>sultats.</returns>
public IActionResult Index(string mot) public IActionResult Index(string mot)
{ {
// Logger la recherche. // Logger la recherche.
@@ -41,7 +50,7 @@ namespace Webzine.WebApplication.Controllers
// Recherche des artistes. // Recherche des artistes.
var artistes = this.artisteRepository.Search(mot); var artistes = this.artisteRepository.Search(mot);
// Paramètres a retourner à la vue. // Param<EFBFBD>tres a retourner <EFBFBD> la vue.
var vm = new RechercheIndexViewModel var vm = new RechercheIndexViewModel
{ {
Mot = mot, Mot = mot,

View File

@@ -82,7 +82,7 @@ namespace Webzine.WebApplication.Controllers
/// </summary> /// </summary>
/// <param name="style">Nom du style musical.</param> /// <param name="style">Nom du style musical.</param>
/// <returns>Vue contenant la liste filtree.</returns> /// <returns>Vue contenant la liste filtree.</returns>
[HttpGet("style/{style}")] [HttpGet("style/{style}")] // TODO pas de route écrite en dur dans le controller
public IActionResult Style(string style) public IActionResult Style(string style)
{ {
this.logger.LogInformation("Recherche des titres pour le style : {Style}.", style); this.logger.LogInformation("Recherche des titres pour le style : {Style}.", style);

View File

@@ -2,10 +2,8 @@
#pragma warning disable SA1200 #pragma warning disable SA1200
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using NLog; using NLog;
using NLog.Web; using NLog.Web;
using Webzine.EntitiesContext; using Webzine.EntitiesContext;
using Webzine.Entity; using Webzine.Entity;
using Webzine.Entity.Fixtures; using Webzine.Entity.Fixtures;