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