//
// 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();
}
}
}