// // Copyright (c) PlaceholderCompany. All rights reserved. // namespace Webzine.Repository { using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; 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 DbArtisteRepository : IArtisteRepository { private readonly 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) { this.logger = logger; this.context = context; } /// public void Add(Artiste artiste) { try { 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); throw; } catch (Exception ex) { 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); } } /// public void Delete(Artiste artiste) { try { if (artiste == null) { throw new ArgumentNullException(nameof(artiste), "L'artiste à supprimer ne peut pas être null."); } this.context.Artistes.Remove(artiste); this.context.SaveChanges(); this.logger.LogDebug("L'artiste {IdArtiste} a bien été supprimé", artiste.IdArtiste); } catch (DbUpdateException dbex) { 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); throw new Exception("Une erreur est survenue lors de la suppression de l'artiste.", ex); } } /// public Artiste Find(int id) { try { 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); throw; } } /// public Artiste FindByName(string nom) { try { var artiste = this.context.Artistes .Include(a => a.Titres) .FirstOrDefault(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; } } /// public IEnumerable FindAll() { try { // .AsNoTracking() rend la requête beaucoup plus rapide pour de la lecture var artistes = this.context.Artistes.AsNoTracking().ToList(); this.logger.LogDebug("{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."); return Enumerable.Empty(); // Retourne une liste vide au lieu de faire crash l'UI } } /// public void Update(Artiste artiste) { if (artiste == null) { throw new ArgumentNullException(nameof(artiste)); } try { this.context.Artistes.Update(artiste); this.context.SaveChanges(); this.logger.LogDebug("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); throw; } catch (Exception ex) { this.logger.LogError(ex, "Erreur lors de la mise à jour de l'artiste {Id}.", artiste.IdArtiste); throw; } } } }