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. public AccueilController( ILogger logger, IConfiguration configuration, ITitreRepository titreRepository) { this.logger = logger; this.configuration = configuration; this.titreRepository = titreRepository; this.logger.LogDebug(1, "initialisation du AccueilController"); this.titreRepository = titreRepository; } /// /// Affiche la page d'accueil du webzine, présentant les derniers titres et les titres les plus populaires. /// /// La vue Index avec le ViewModel contenant les listes de titres à afficher. public IActionResult Index() { 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 titres = this.titreRepository.FindAll(); var vm = new AccueilIndexViewModel { DerniersTitres = titres.Take(derniereChronique).ToList(), TopTitres = titres .OrderByDescending(t => t.NbLikes) .Take(nbTopTitres) .ToList(), }; return this.View(vm); } } }