// // Copyright (c) Equipe 1 - . All rights reserved. // using Webzine.Repository.Contracts; namespace Webzine.WebApplication.Controllers { using Microsoft.AspNetCore.Mvc; using Webzine.Repository.Fake; 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; /// /// 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. /// Repository des titres injecté 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. /// /// 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 topTitres = this.configuration.GetValue("Webzine:NombreDeTopTitres"); var titres = this.titreRepository.FindAll() .ToList(); var vm = new AccueilIndexViewModel { DerniersTitres = titres .OrderByDescending(t => t.DateCreation) .Take(derniereChronique) .ToList(), TopTitres = titres .OrderByDescending(t => t.NbLikes) .Take(topTitres) .ToList(), }; return this.View(vm); } } }