// // Copyright (c) PlaceholderCompany. All rights reserved. // namespace Webzine.Repository { using Microsoft.EntityFrameworkCore; using Webzine.EntitiesContext; using Webzine.Entity; using Webzine.Repository.Contracts; /// /// Implémentation de l'interface ITitreRepository. /// public class TitreRepository : ITitreRepository { private readonly WebzineDbContext context; /// /// Initializes a new instance of the class. /// public TitreRepository(WebzineDbContext context) { this.context = context; } /// /// Rechercher un titre à l'aide de son nom. /// /// Nom de la musique. /// IEnumerable Titre. public IEnumerable Search(string mot) { if (string.IsNullOrWhiteSpace(mot)) { return Enumerable.Empty(); } return this.context.Titres .Where(t => !string.IsNullOrWhiteSpace(t.Libelle) && t.Libelle.ToLower().Contains(mot.ToLower())) .OrderBy(t => t.Libelle) .ToList(); } /// /// Retourne le titre demandé à partir de son identifiant. /// /// Id du titre cherché. /// Un titre. public Titre? Find(int idTitre) { var find = this.context.Titres .Where(t => t.IdTitre == idTitre) .First(); return find; } /// /// Retourne les titres demandés (pour la pagination) triés /// selon la date de création(du plus récent à ancien). /// /// IEnumerable de Titre. public IEnumerable FindTitres( int offset, int limit) { return this.context.Titres .OrderByDescending(t => t.DateCreation) .Include(t => t.Artiste) .Skip((offset - 1) * limit) .Take(limit) .ToList(); } /// /// Retourne tous les titres. /// /// Liste de Titre. public IEnumerable FindAll() { return this.context.Titres .AsNoTracking() .Include(t => t.Artiste) .OrderByDescending(t => t.DateCreation) .ToList(); } /// /// Trouver les titres correspondant à un style. /// /// Style de musique recherché. /// IEnumerable Titre. public IEnumerable SearchByStyle(string libelle) { return this.context.Titres .Where(t => t.Styles.Any(s => !string.IsNullOrWhiteSpace(s.Libelle) && s.Libelle.ToLower().Contains(libelle.ToLower()))) .OrderBy(t => t.Libelle) .ToList(); } } }