namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Accueil;
///
/// Permet de retourner la page d'accueil avec tous les éléments.
///
public class AccueilController : Controller
{
// Injection du logger via le constructeur
private readonly ILogger logger;
private readonly IConfiguration configuration;
private readonly ITitreRepository titreRepository;
///
/// Initializes a new instance of the class.
/// Initialise une nouvelle instance de la classe .
///
/// Service de journalisation injecté pour enregistrer les événements et les erreurs.
/// Service d'injection de configuration pour accéder aux paramètres de l'application.
/// Service d'injection du dépôt de titres pour accéder aux données des titres.
public AccueilController(
ILogger logger,
IConfiguration configuration,
ITitreRepository titreRepository)
{
this.logger = logger;
this.configuration = configuration;
this.titreRepository = titreRepository;
this.logger.LogDebug(1, "initialisation du AccueilController");
}
///
/// Affiche la page d'accueil du webzine, présentant les derniers titres et les titres les plus populaires.
///
/// Le numéro de page pour la pagination des titres (par défaut à 0).
/// La vue Index avec le ViewModel contenant les listes de titres à afficher.
public IActionResult Index(int page = 0)
{
this.logger.LogInformation("Arrivée sur la page d'accueil");
var derniereChronique = this.configuration.GetValue("Webzine:NombreDerniereChronique");
var nbTopTitres = this.configuration.GetValue("Webzine:NombreDeTopTitres");
var totalTitres = this.titreRepository.Count();
var totalPages = (int)Math.Ceiling((double)totalTitres / derniereChronique);
var titresPagines = this.titreRepository.FindTitres(page * derniereChronique, derniereChronique);
var topTitres = this.titreRepository.FindAll()
.OrderByDescending(t => t.NbLikes)
.Take(nbTopTitres);
var vm = new AccueilIndexViewModel
{
DerniersTitres = titresPagines.ToList(),
TopTitres = topTitres.ToList(),
Page = page,
TotalPages = totalPages,
};
return this.View(vm);
}
}
}