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"); this.titreRepository = titreRepository; } /// /// 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 titres_paginés = this.titreRepository.FindTitres(page * derniereChronique, derniereChronique); var top_titres = this.titreRepository.FindAll() .OrderByDescending(t => t.NbLikes) .Take(nbTopTitres); var vm = new AccueilIndexViewModel { DerniersTitres = titres_paginés.ToList(), TopTitres = top_titres.ToList(), Page = page, }; return this.View(vm); } } }