namespace Webzine.Repository; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using Webzine.EntitiesContext; using Webzine.Entity; using Webzine.Repository.Contracts; /// /// Classe qui implémente le repository pour les styles en utilisant une base de données. /// public class DbStyleRepository : IStyleRepository { private readonly ILogger logger; private readonly WebzineDbContext context; /// /// Initializes a new instance of the class. /// /// Le service de journalisation injecté pour suivre les opérations du repository. /// Le contexte de base de données injecté. public DbStyleRepository(ILogger logger, WebzineDbContext context) { this.logger = logger; this.context = context; this.logger.LogDebug(1, "NLog injecté dans DbStyleRepository"); } /// public void Add(Style style) { try { this.logger.LogInformation("Ajout d'un nouveau style: {Libelle}", style.Libelle); this.logger.LogDebug("Début de l'ajout du style en base de données"); this.context.Styles.Add(style); this.context.SaveChanges(); this.logger.LogDebug("Style ajouté avec succès avec l'ID: {IdStyle}", style.IdStyle); } catch (DbUpdateException ex) { this.logger.LogError(ex, "Erreur de base de données lors de l'ajout du style: {Libelle}", style.Libelle); throw; } catch (Exception ex) { this.logger.LogError(ex, "Erreur lors de l'ajout du style: {Libelle}", style.Libelle); throw; } } /// public void Delete(Style style) { try { this.logger.LogInformation("Suppression du style avec l'ID: {IdStyle}", style.IdStyle); this.logger.LogDebug("Vérification de l'existence du style en base de données"); // Check if style exists var existingStyle = this.context.Styles.Find(style.IdStyle); if (existingStyle == null) { this.logger.LogWarning("Style avec l'ID {IdStyle} non trouvé pour la suppression", style.IdStyle); throw new InvalidOperationException($"Style avec l'ID {style.IdStyle} non trouvé."); } this.logger.LogDebug("Style trouvé, suppression en cours"); this.context.Styles.Remove(existingStyle); this.context.SaveChanges(); this.logger.LogDebug("Style supprimé avec succès: {IdStyle}", style.IdStyle); } catch (DbUpdateException ex) { this.logger.LogError(ex, "Erreur de base de données lors de la suppression du style ID: {IdStyle}", style.IdStyle); throw; } catch (Exception ex) { this.logger.LogError(ex, "Erreur lors de la suppression du style ID: {IdStyle}", style.IdStyle); throw; } } /// public Style Find(int id) { try { this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id); var style = this.context.Styles .Include(s => s.Titres) .SingleOrDefault(s => s.IdStyle == id); if (style == null) { this.logger.LogWarning("Style avec l'ID {Id} non trouvé", id); return null; } this.logger.LogDebug("Style trouvé: {Libelle}", style.Libelle); return style; } catch (Exception ex) { this.logger.LogError(ex, "Erreur lors de la recherche du style avec l'ID: {Id}", id); throw; } } /// public IEnumerable