#124 Pagination faite pour la page d'accueil, ordonnée par date de création puis du libelle. Début de pagination pour les artistes.
This commit is contained in:
@@ -39,6 +39,14 @@ namespace Webzine.Repository.Contracts
|
|||||||
/// <returns>Retourne une collection d'artistes.</returns>
|
/// <returns>Retourne une collection d'artistes.</returns>
|
||||||
IEnumerable<Artiste> FindAll();
|
IEnumerable<Artiste> FindAll();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Récupère une liste d'artistes pour une page spécifique, en fonction du numéro de page et de la taille de la page.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pageNumber">Le numéro de la page à récupérer.</param>
|
||||||
|
/// <param name="pageSize">La taille de chaque page.</param>
|
||||||
|
/// <returns>Une liste d'artistes pour la page demandée.</returns>
|
||||||
|
IEnumerable<Artiste> FindArtistes(int pageNumber, int pageSize);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Met à jour les informations d'un artiste existant dans la collection.
|
/// Met à jour les informations d'un artiste existant dans la collection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -200,5 +200,31 @@ namespace Webzine.Repository
|
|||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Permet de paginer les artistes en fonction du numéro de page et de la taille de page spécifiés.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pageNumber">Le numéro de la page à récupérer.</param>
|
||||||
|
/// <param name="pageSize">La taille de chaque page.</param>
|
||||||
|
/// <returns>Une liste d'artistes pour la page demandée.</returns>
|
||||||
|
public IEnumerable<Artiste> FindArtistes(int pageNumber, int pageSize)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var artistes = this.context.Artistes
|
||||||
|
.AsNoTracking()
|
||||||
|
.Include(t => t.Titres)
|
||||||
|
.Skip((pageNumber - 1) * pageSize)
|
||||||
|
.Take(pageSize)
|
||||||
|
.ToList();
|
||||||
|
this.logger.LogDebug("Page {PageNumber} d'artistes récupérée avec {PageSize} artistes par page.", pageNumber, pageSize);
|
||||||
|
return artistes;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
this.logger.LogError(ex, "Erreur lors de la pagination des artistes. Page: {PageNumber}, Taille: {PageSize}", pageNumber, pageSize);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,15 +99,14 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
this.logger.LogDebug("Recherche des titres avec offset: {Offset}, limit: {Limit}", offset, limit);
|
this.logger.LogDebug("Recherche des titres avec offset: {Offset}, limit: {Limit}", offset, limit);
|
||||||
|
|
||||||
var titres = this.context.Titres
|
var titres = this.context.Titres
|
||||||
|
.OrderByDescending(t => t.DateCreation)
|
||||||
|
.ThenBy(t => t.Libelle)
|
||||||
.Include(t => t.Artiste)
|
.Include(t => t.Artiste)
|
||||||
.Include(t => t.Styles)
|
.Include(t => t.Styles)
|
||||||
.OrderBy(t => t.Libelle)
|
|
||||||
.Skip(offset)
|
.Skip(offset)
|
||||||
.Take(limit)
|
.Take(limit)
|
||||||
.AsNoTracking()
|
.AsNoTracking();
|
||||||
.ToList();
|
|
||||||
|
|
||||||
this.logger.LogDebug("{Count} titres trouvés", titres.Count);
|
|
||||||
return titres;
|
return titres;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@@ -106,5 +106,17 @@ namespace Webzine.Repository
|
|||||||
{
|
{
|
||||||
return this.dataStore.Artistes.Count(predicate);
|
return this.dataStore.Artistes.Count(predicate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
/// <param name="pageNumber">Le numéro de la page à récupérer.</param>
|
||||||
|
/// <param name="pageSize">La taille de chaque page.</param>
|
||||||
|
/// <returns>Une liste d'artistes pour la page demandée.</returns>
|
||||||
|
public IEnumerable<Artiste> FindArtistes(int pageNumber, int pageSize)
|
||||||
|
{
|
||||||
|
return this.dataStore.Artistes
|
||||||
|
.Skip((pageNumber - 1) * pageSize)
|
||||||
|
.Take(pageSize)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,6 +49,7 @@ public class LocalTitreRepository : ITitreRepository
|
|||||||
{
|
{
|
||||||
return this.dataStore.Titres
|
return this.dataStore.Titres
|
||||||
.OrderByDescending(t => t.DateCreation)
|
.OrderByDescending(t => t.DateCreation)
|
||||||
|
.ThenBy(t => t.Libelle)
|
||||||
.Skip(offset)
|
.Skip(offset)
|
||||||
.Take(limit);
|
.Take(limit);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <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="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(
|
public AccueilController(
|
||||||
ILogger<AccueilController> logger,
|
ILogger<AccueilController> logger,
|
||||||
IConfiguration configuration,
|
IConfiguration configuration,
|
||||||
@@ -36,24 +37,25 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Affiche la page d'accueil du webzine, présentant les derniers titres et les titres les plus populaires.
|
/// Affiche la page d'accueil du webzine, présentant les derniers titres et les titres les plus populaires.
|
||||||
/// </summary>
|
/// </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>
|
/// <returns>La vue Index avec le ViewModel contenant les listes de titres à afficher.</returns>
|
||||||
public IActionResult Index()
|
public IActionResult Index(int page = 0)
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Arrivée sur la page d'accueil");
|
this.logger.LogInformation("Arrivée sur la page d'accueil");
|
||||||
|
|
||||||
var derniereChronique = this.configuration.GetValue<int>("Webzine:NombreDerniereChronique");
|
var derniereChronique = this.configuration.GetValue<int>("Webzine:NombreDerniereChronique");
|
||||||
var nbTopTitres = this.configuration.GetValue<int>("Webzine:NombreDeTopTitres");
|
var nbTopTitres = this.configuration.GetValue<int>("Webzine:NombreDeTopTitres");
|
||||||
|
|
||||||
var titres = this.titreRepository.FindAll();
|
var titres_paginé = this.titreRepository.FindTitres(page * derniereChronique, derniereChronique);
|
||||||
|
var top_titres = this.titreRepository.FindAll()
|
||||||
|
.OrderByDescending(t => t.NbLikes)
|
||||||
|
.Take(nbTopTitres);
|
||||||
|
|
||||||
var vm = new AccueilIndexViewModel
|
var vm = new AccueilIndexViewModel
|
||||||
{
|
{
|
||||||
DerniersTitres = titres.Take(derniereChronique).ToList(),
|
DerniersTitres = titres_paginé.ToList(),
|
||||||
|
TopTitres = top_titres.ToList(),
|
||||||
TopTitres = titres
|
Page = page,
|
||||||
.OrderByDescending(t => t.NbLikes)
|
|
||||||
.Take(nbTopTitres)
|
|
||||||
.ToList(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return this.View(vm);
|
return this.View(vm);
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
// public int NombreDeTitre { get; set; } = 0;
|
// public int NombreDeTitre { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Obtient ou définit le nombre de titre paginé.
|
/// Obtient ou définit le numéro de page pour la pagination des titres affichés sur la page d'accueil.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
// public int Pagination { get; set; } = 0;
|
public int Page { get; set; } = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -74,9 +74,11 @@
|
|||||||
}
|
}
|
||||||
<!-- Bouton -->
|
<!-- Bouton -->
|
||||||
<div class="row justify-content-end">
|
<div class="row justify-content-end">
|
||||||
<button class="btn btn-secondary col-auto mt-3">
|
<a asp-action="Index" asp-route-page="@(Model.Page + 1)"
|
||||||
|
class="btn btn-secondary col-auto mt-3">
|
||||||
Titres plus anciens >>
|
Titres plus anciens >>
|
||||||
</button>
|
</button>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user