diff --git a/Webzine.Repository.Contracts/IArtisteRepository.cs b/Webzine.Repository.Contracts/IArtisteRepository.cs
index 1e4a369..ea99b20 100644
--- a/Webzine.Repository.Contracts/IArtisteRepository.cs
+++ b/Webzine.Repository.Contracts/IArtisteRepository.cs
@@ -1,17 +1,46 @@
-// using Webzine.Entity;
-
-namespace Webzine.Repository.Contracts
+namespace Webzine.Repository.Contracts
{
+ using Webzine.Entity;
+ ///
+ /// Défini une interface pour gérer les opérations de base de données liées aux artistes.
+ ///
public interface IArtisteRepository
{
- // void Add(Artiste artiste);
+ ///
+ /// Ajoute un nouvel artiste.
+ ///
+ /// L'artiste à ajouter à la collection. Ne peut pas être null.
+ void Add(Artiste artiste);
- // void Delete(Artiste artiste);
+ ///
+ /// Supprime un artiste.
+ ///
+ /// L'artiste à supprimer.
+ void Delete(Artiste artiste);
- // Artiste Find(int id);
+ ///
+ /// Récupère un artiste par son identifiant unique. Si aucun artiste n'est trouvé, retourne null.
+ ///
+ /// L'identifiant de l'artiste.
+ ///
+ Artiste Find(int id);
+ ///
+ /// Récupère un artiste par son nom. Si aucun artiste n'est trouvé, retourne null.
+ ///
+ /// Le nom de l'artiste.
+ /// L'artiste recherché ou null.
+ Artiste FindByName(string name);
- // IEnumerable FindAll();
+ ///
+ /// Récupère tous les artistes disponibles dans la collection. Si aucun artiste n'est trouvé, retourne une collection vide.
+ ///
+ /// Retourne une collection d'artistes.
+ IEnumerable FindAll();
- // void Update(Artiste artiste);
+ ///
+ /// Met à jour les informations d'un artiste existant dans la collection.
+ ///
+ /// L'artiste à mettre à jour.
+ void Update(Artiste artiste);
}
}
\ No newline at end of file
diff --git a/Webzine.Repository/LocalArtisteRepository.cs b/Webzine.Repository/LocalArtisteRepository.cs
new file mode 100644
index 0000000..036e183
--- /dev/null
+++ b/Webzine.Repository/LocalArtisteRepository.cs
@@ -0,0 +1,92 @@
+namespace Webzine.Repository
+{
+ using Microsoft.EntityFrameworkCore;
+ using Webzine.EntitiesContext;
+ using Webzine.Entity;
+ using Webzine.Repository.Contracts;
+
+ ///
+ /// Initialise une classe qui implémente l'interface pour gérer les opérations de base de données liées aux artistes.
+ /// Utilise en injection de dépendances.
+ ///
+ public class LocalArtisteRepository : IArtisteRepository
+ {
+ ///
+ /// Contexte de la base de données utilisé pour accéder aux entités et effectuer des opérations de persistance. Injecté via le constructeur.
+ ///
+ private WebzineDbContext _context;
+
+ ///
+ /// 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 LocalArtisteRepository(WebzineDbContext context)
+ {
+ this._context = context;
+ }
+
+ ///
+ /// Méthode pour ajouter un nouvel artiste à la base de données.
+ ///
+ /// L'artiste à ajouter. Ne peut pas être null.
+ public void Add(Artiste artiste)
+ {
+ this._context.Artistes.Add(artiste);
+ this._context.SaveChanges();
+ }
+
+ ///
+ /// Méthode pour supprimer un artiste de la base de données.
+ ///
+ /// L'artiste à supprimer.
+ public void Delete(Artiste artiste)
+ {
+ this._context.Artistes.Remove(artiste);
+ this._context.SaveChanges();
+ }
+
+ ///
+ /// Récupère un artiste avec son id.
+ ///
+ /// L'id de l'artiste.
+ /// L'artiste correspondant à l'identifiant fourni, ou null si aucun artiste trouvé.
+ public Artiste Find(int id)
+ {
+ return this._context.Artistes
+ .Include(a => a.Titres)
+ .FirstOrDefault(a => a.IdArtiste == id);
+ }
+
+ ///
+ /// Récupère un artiste avec son nom.
+ ///
+ /// Nom de l'artiste.
+ /// L'artiste correspondant à l'identifiant fourni, ou null si aucun artiste trouvé.
+ public Artiste FindByName(string nom)
+ {
+ return this._context.Artistes
+ .Include(a => a.Titres)
+ .FirstOrDefault(a => a.Nom == nom);
+ }
+
+ ///
+ /// Retourne tous les artistes présents dans la base de données.
+ ///
+ /// La liste des artistes.
+ public IEnumerable FindAll()
+ {
+ return this._context.Artistes.ToList();
+ }
+
+ ///
+ /// Mets à jour un artiste existant dans la base de données avec les nouvelles informations fournies dans l'objet artiste.
+ ///
+ /// L'artiste à mettre à jour.
+ public void Update(Artiste artiste)
+ {
+ this._context.Artistes.Update(artiste);
+ this._context.SaveChanges();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Webzine.Repository/Webzine.Repository.csproj b/Webzine.Repository/Webzine.Repository.csproj
index 364f60a..afa21ab 100644
--- a/Webzine.Repository/Webzine.Repository.csproj
+++ b/Webzine.Repository/Webzine.Repository.csproj
@@ -24,6 +24,7 @@
+
diff --git a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs
index d059092..bca6cfd 100644
--- a/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs
+++ b/Webzine.WebApplication/Areas/Administration/Controllers/ArtisteController.cs
@@ -1,6 +1,7 @@
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Entity.Fixtures;
+using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Artiste;
namespace Webzine.WebApplication.Areas.Administration.Controllers;
@@ -10,16 +11,17 @@ public class ArtisteController : Controller
{
// Injection du logger via le constructeur
private readonly ILogger _logger;
- private readonly List _artistes;
+ private readonly IArtisteRepository _artisteRepository;
+ private readonly List _artistes = new List();
- public ArtisteController(ILogger logger)
+ public ArtisteController(ILogger logger,
+ IArtisteRepository artisteRepository)
{
this._logger = logger;
this._logger.LogDebug(1, "initialisation du ArtisteController d'administration");
- var factory = new DataFactory();
-
- _artistes = factory.GenerateArtists(10);
+ this._artisteRepository = artisteRepository;
+ this._artistes.AddRange(this._artisteRepository.FindAll());
}
///
@@ -30,7 +32,9 @@ public class ArtisteController : Controller
public IActionResult Index()
{
- var _artistes_ordre = _artistes.OrderBy(t => t.Nom).ToList();
+ this._logger.LogInformation("ID 1", this._artisteRepository.Find(1));
+ var _artistes_ordre = this._artistes.OrderBy(t => t.Nom).ToList();
+ this._logger.LogInformation("LISTE ARTISTES ORDRE", _artistes_ordre);
this._logger.LogInformation("Initialisation du contrôleur TitreController pour l'Administration.");
@@ -60,7 +64,7 @@ public class ArtisteController : Controller
/// Redirection.
public IActionResult Edit(int id)
{
- var artiste = _artistes.First(t => t.IdArtiste == id);
+ var artiste = this._artistes.First(t => t.IdArtiste == id);
var model = new AdminArtisteForm
{
@@ -79,7 +83,7 @@ public class ArtisteController : Controller
/// Redirection.>
public IActionResult Delete(int id)
{
- var artiste = _artistes.First(t => t.IdArtiste == id);
+ var artiste = this._artistes.First(t => t.IdArtiste == id);
var model = new AdminArtisteForm
{
Id = id,
diff --git a/Webzine.WebApplication/Controllers/ArtisteController.cs b/Webzine.WebApplication/Controllers/ArtisteController.cs
index 35a2cbc..b63f140 100644
--- a/Webzine.WebApplication/Controllers/ArtisteController.cs
+++ b/Webzine.WebApplication/Controllers/ArtisteController.cs
@@ -1,21 +1,26 @@
-using Microsoft.AspNetCore.Mvc;
-using Webzine.Entity.Fixtures;
-
-namespace Webzine.WebApplication.Controllers
+namespace Webzine.WebApplication.Controllers
{
+ using Microsoft.AspNetCore.Mvc;
+ using Webzine.Entity.Fixtures;
+ using Webzine.Repository.Contracts;
+ using Webzine.WebApplication.ViewModels.Artiste;
+
public class ArtisteController : Controller
{
// Injection du logger via le constructeur
private readonly ILogger _logger;
+ private readonly IArtisteRepository _artisteRepository;
///
- /// Initialise une nouvelle instance du avec un service de journalisation injecté.
+ /// Initialise une nouvelle instance du . avec un service de journalisation injecté.
///
/// Service de journalisation injecté pour enregistrer les événements et les erreurs.
- public ArtisteController(ILogger logger)
+ public ArtisteController(ILogger logger,
+ IArtisteRepository artisteRepository)
{
this._logger = logger;
- this._logger.LogDebug(1, "initialisation du ArtisteController");
+ this._logger.LogDebug("Initialisation du ArtisteController");
+ this._artisteRepository = artisteRepository;
}
///
@@ -31,7 +36,7 @@ namespace Webzine.WebApplication.Controllers
if (string.IsNullOrEmpty(nom))
{
this._logger.LogWarning("Nom de l'artiste manquant dans la requête.");
- return RedirectToAction("Index", "Accueil");
+ return RedirectToAction("Index");
}
// On transforme "fatal-bazooka" en "Fatal Bazooka" pour la factory
@@ -39,17 +44,28 @@ namespace Webzine.WebApplication.Controllers
.ToTitleCase(nom.Replace("-", " "));
// On appelle la factory pour obtenir l'artiste unique
- var artiste = ArtisteFactory.SeedArtisteByName(nomPropre);
+ var artiste = this._artisteRepository.FindByName(nomPropre);
if (artiste == null)
{
this._logger.LogWarning("Artiste non trouvé pour le nom : {NomArtiste}", nomPropre);
return RedirectToAction("Index");
}
+ var viewModel = new ArtisteDetailsViewModel
+ {
+ IdArtiste = artiste.IdArtiste,
+ Nom = artiste.Nom,
+ Biographie = artiste.Biographie,
+ // On effectue le groupement ici une bonne fois pour toutes
+ AlbumsGroupes = artiste.Titres
+ .OrderBy(t => t.Libelle)
+ .GroupBy(t => t.Album)
+ .OrderBy(g => g.Key),
+ };
this._logger.LogInformation("Artiste trouvé : {NomArtiste}", nom);
- return View(artiste);
+ return View(viewModel);
}
}
}
diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs
index ae6bb7a..35ddffd 100644
--- a/Webzine.WebApplication/Program.cs
+++ b/Webzine.WebApplication/Program.cs
@@ -22,6 +22,7 @@ try
.AddRazorRuntimeCompilation();
builder.Services.AddSingleton();
+ builder.Services.AddScoped();
builder.Services.AddDbContext(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));
diff --git a/Webzine.WebApplication/Webzine.WebApplication.csproj b/Webzine.WebApplication/Webzine.WebApplication.csproj
index 9aad56b..93e8483 100644
--- a/Webzine.WebApplication/Webzine.WebApplication.csproj
+++ b/Webzine.WebApplication/Webzine.WebApplication.csproj
@@ -17,7 +17,6 @@
-