namespace Webzine.Repository.Contracts
{
using Webzine.Entity;
///
/// Interface qui définit les opérations de base pour la gestion des titres dans une source de données.
///
public interface ITitreRepository
{
///
/// Ajoute un titre à la liste des titres.
///
/// L'objet titre à ajouter.
void Add(Titre titre);
///
/// Remonte le nombre de titres.
///
/// Le nombre total de titres présents dans la liste après l'incrémentation du nombre de lectures.
int Count();
///
/// Supprime un titre de la liste des titres.
///
/// L'objet titre à supprimer.
void Delete(Titre titre);
///
/// Trouve un titre dans la liste des titres en fonction de son identifiant.
///
/// L'identifiant du titre à trouver.
/// Le titre correspondant à l'identifiant fourni, ou null si aucun titre n'est trouvé.
Titre Find(int idTitre);
///
/// Recherche les titres dans la liste des titres en fonction de l'offset et de la limite spécifiés, permettant ainsi une pagination des résultats.
///
/// Le nombre de titres à ignorer avant de commencer à retourner les résultats.
/// Le nombre maximum de titres à retourner.
/// Une collection de titres correspondant au critère de pagination, triée par libellé.
IEnumerable FindTitres(int offset, int limit);
///
/// Trouve tous les titres dans la liste des titres.
///
/// Une collection de tous les titres présents dans la liste.
IEnumerable FindAll();
///
/// Incrémente le nombre de lectures d'un titre donné. Si le titre est null, un message d'avertissement est enregistré dans les logs et aucune action n'est effectuée.
///
/// L'objet titre dont le nombre de lectures doit être incrémenté.
void IncrementNbLectures(Titre titre);
///
/// Incrémente le nombre de likes d'un titre donné. Si le titre est null, un message d'avertissement est enregistré dans les logs et aucune action n'est effectuée.
///
/// L'objet titre dont le nombre de likes doit être incrémenté.
void IncrementNbLikes(Titre titre);
///
/// Recherche les titres dont le libellé contient le mot spécifié, en ignorant la casse.
///
/// Le mot à rechercher dans les libellés des titres.
/// Une collection de titres correspondant au critère de recherche, triée par libellé.
IEnumerable Search(string mot);
///
/// Recherche les titres associés à un style dont le libellé contient la chaîne spécifiée, en ignorant la casse.
///
/// Le libellé du style à rechercher dans les titres.
/// Une collection de titres correspondant au critère de recherche, triée par libellé.
IEnumerable SearchByStyle(string libelle);
///
/// Retourne une liste de titre filtré par nom et paginé.
///
/// Nombre de titres a passer.
/// Nombre de titre récupéré.
/// Nom du style.
/// Une liste de titre.
IEnumerable SearchByStylePaginate(int offset, int limit, string libelle);
///
/// Compter le nombre de titres au sein d'un style.
///
/// Style de la musique.
/// Un entier.
int CountByStyle(string libelle);
///
/// Met à jour un titre dans la liste des titres en fonction de son identifiant. Si aucun titre correspondant à l'identifiant du titre fourni n'est trouvé, un message d'avertissement est enregistré dans les logs et aucune mise à jour n'est effectuée.
///
/// L'objet titre à mettre à jour.
void Update(Titre titre);
///
/// Retourne le nombre total de likes.
///
/// Integer.
int CountLike();
///
/// Retourne le nombre total de lecture.
///
/// Integer.
int CountLecture();
///
/// Retourne le nom de l'artiste ayant le plus de titres chroniqués.
///
/// Le nom de l'artiste le plus chroniqué, ou null si aucun titre n'existe.
string? FindMostReviewedArtistName();
///
/// Retourne le nom de l'artiste ayant le plus d'albums chroniqués.
///
/// Le nom de l'artiste concerné, ou null si aucun titre n'existe.
string? FindArtistNameWithMostReviewedAlbums();
///
/// Retourne l'identifiant et le libellé du titre le plus joué.
///
/// Un tuple contenant l'identifiant et le libellé du titre le plus joué, ou null si aucun titre n'existe.
(int IdTitre, string Libelle)? FindMostPlayedTitle();
///
/// Récupération des chroniques.
///
/// Nombre d'éléments.
/// Limite d'éléments.
/// Liste des derniers titres chroniqués.
IEnumerable DerniereChronique(int offset, int limit);
///
/// Récupération du top titre liké.
///
/// Liste de titre les plus likés.
IEnumerable TopTitre(int offset, int limit);
}
}