76 lines
2.8 KiB
C#
76 lines
2.8 KiB
C#
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
using Webzine.Repository.Contracts;
|
|
using Webzine.WebApplication.Areas.Administration.ViewModels;
|
|
|
|
[Area("Administration")]
|
|
public class DashboardController : Controller // TODO à refaire
|
|
{
|
|
private readonly ILogger<DashboardController> logger;
|
|
private readonly IStyleRepository styleRepository;
|
|
private readonly IArtisteRepository artisteRepository;
|
|
private readonly ITitreRepository titreRepository;
|
|
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="DashboardController"/> class.
|
|
/// Initialise une nouvelle instance de la classe <see cref="DashboardController"/>.
|
|
/// </summary>
|
|
/// <param name="logger">Service de journalisation injecté.</param>
|
|
/// <param name="styleRepository">Repository des styles injecté.</param>
|
|
public DashboardController(ILogger<DashboardController> 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.");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Affiche le tableau de bord de l'administration.
|
|
/// </summary>
|
|
/// <returns>La vue Index du tableau de bord.</returns>
|
|
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);
|
|
}
|
|
} |