namespace Webzine.Business;
using Webzine.Business.Contracts;
using Webzine.Business.Contracts.Dto;
using Webzine.Repository.Contracts;
///
/// Implémentation de .
/// Orchestre plusieurs appels aux repositories pour produire les statistiques du tableau de bord.
///
public class DashboardService : IDashboardService
{
private readonly IArtisteRepository artisteRepository;
private readonly ITitreRepository titreRepository;
private readonly IStyleRepository styleRepository;
///
/// Initializes a new instance of the class.
///
/// Repository des artistes.
/// Repository des titres.
/// Repository des styles.
public DashboardService(
IArtisteRepository artisteRepository,
ITitreRepository titreRepository,
IStyleRepository styleRepository)
{
this.artisteRepository = artisteRepository;
this.titreRepository = titreRepository;
this.styleRepository = styleRepository;
}
///
public DashboardDTO GetDashboardData()
{
string artisteLePlusChronique = this.titreRepository.FindMostReviewedArtistName() ?? string.Empty;
string albumLePlusChronique = this.titreRepository.FindArtistNameWithMostReviewedAlbums() ?? string.Empty;
var musiqueLaPlusJouee = this.titreRepository.FindMostPlayedTitle();
return new DashboardDTO
{
NombreArtistes = this.artisteRepository.Count(),
ArtisteLePlusChronique = artisteLePlusChronique,
AlbumLePlusChronique = albumLePlusChronique,
NombreBiographies = this.artisteRepository.CountWithBiography(),
IdMusiqueLaPlusJouee = musiqueLaPlusJouee?.IdTitre ?? 0,
MusiqueLaPlusJouee = musiqueLaPlusJouee?.Libelle ?? string.Empty,
NombreTitres = this.titreRepository.Count(),
NombreGenres = this.styleRepository.Count(),
NombreLectures = this.titreRepository.CountLecture(),
NombreLikes = this.titreRepository.CountLike(),
};
}
}