using System.Diagnostics; using Microsoft.AspNetCore.Mvc; using Webzine.Entity; using Webzine.Entity.Fixtures; using Webzine.Repository.Contracts; using Webzine.WebApplication.Areas.Administration.ViewModels; namespace Webzine.WebApplication.Areas.Administration.Controllers; [Area("Administration")] public class DashboardController : Controller { private readonly ILogger logger; private readonly IStyleRepository styleRepository; private readonly IArtisteRepository artisteRepository; private readonly ITitreRepository titreRepository; /// /// Initializes a new instance of the class. /// Initialise une nouvelle instance de la classe . /// /// Service de journalisation injecté. /// Repository des styles injecté. public DashboardController(ILogger logger, IStyleRepository styleRepository, IArtisteRepository artisteRepository, ITitreRepository titreRepository) { this.logger = logger; this.styleRepository = styleRepository; this.artisteRepository = artisteRepository; this.titreRepository = titreRepository; this.logger.LogInformation("Initialisation du contrôleur TitreController."); } /// /// Affiche le tableau de bord de l'administration. /// /// La vue Index du tableau de bord. public IActionResult Index() { var artisteLePlusChronique = this.titreRepository.FindAll() .GroupBy(t => t.Artiste) .OrderByDescending(g => g.Count()) .First(); var albumLePlusChronique = this.titreRepository.FindAll() .GroupBy(t => t.Artiste) .OrderByDescending(g => g.Select(t => t.Album).Distinct().Count()) .First(); var musiqueLaPlusJouee = this.titreRepository.FindAll() .OrderByDescending(t => t.NbLectures) .First(); var model = new DashboardViewModel { NombreArtistes = this.artisteRepository.FindAll().Count(), ArtisteLePlusChronique = artisteLePlusChronique.Key.Nom, AlbumLePlusChronique = albumLePlusChronique.Key.Nom, NombreBiographies = this.artisteRepository.FindAll().Count(a => !string.IsNullOrEmpty(a.Biographie)), IdMusiqueLaPlusJouee = musiqueLaPlusJouee.IdTitre, MusiqueLaPlusJouee = musiqueLaPlusJouee.Libelle, NombreTitres = this.titreRepository.Count(), NombreGenres = this.styleRepository.FindAll().Count(), NombreLectures = this.titreRepository.FindAll().Sum(t => t.NbLectures), NombreLikes = this.titreRepository.FindAll().Sum(t => t.NbLikes), }; return this.View(model); } }