using Microsoft.Extensions.Logging; using Webzine.Entity; using Webzine.Entity.Fixtures; using Webzine.Repository.Contracts; namespace Webzine.Repository; /// /// Classe qui permet d'initialiser un jeu de données /// pour tester l'application. /// public class LocalEntityRepository : ITitreRepository { private readonly ILogger _logger; private readonly List _titres; /// /// Initialise une nouvelle instance du avec un service de journalisation injecte. /// /// Service de journalisation injecte pour suivre les operations du repository. public LocalEntityRepository(ILogger logger) { this._logger = logger; this._logger.LogDebug(1, "NLog injected into LocalEntityRepository"); var factory = new DataFactory(); var artistes = factory.GenerateArtists(10); var styles = factory.GenerateStyles(10); _titres = factory.GenerateTitres(30, artistes, styles); factory.GenerateCommentaires(50, _titres); } public IEnumerable Search(string mot) { if (string.IsNullOrWhiteSpace(mot)) { return Enumerable.Empty(); } return _titres .Where(t => !string.IsNullOrWhiteSpace(t.Libelle) && t.Libelle.Contains(mot, StringComparison.OrdinalIgnoreCase)) .OrderBy(t => t.Libelle) .ToList(); } public Titre? Find(int idTitre) { return _titres.FirstOrDefault(t => t.IdTitre == idTitre); } public IEnumerable FindTitres( int offset, int limit) { return this._titres .OrderByDescending(t => t.DateCreation) .Skip((offset - 1) * limit) .Take(limit) .ToList(); } /// /// Retourner tous les titres. /// /// IEnumerable de titre. public IEnumerable FindAll() { return _titres; } /// /// Rechercher les titres par style. /// /// Libelle du style. /// IEnumerable de titre. public IEnumerable SearchByStyle(string libelle) { if (string.IsNullOrWhiteSpace(libelle)) { return Enumerable.Empty(); } return _titres .Where(t => t.Styles.Any(s => !string.IsNullOrWhiteSpace(s.Libelle) && s.Libelle.Contains(libelle, StringComparison.OrdinalIgnoreCase))) .OrderBy(t => t.Libelle) .ToList(); } }