diff --git a/Webzine.Repository.Contracts/IArtisteRepository.cs b/Webzine.Repository.Contracts/IArtisteRepository.cs
index 1985ddc..b480816 100644
--- a/Webzine.Repository.Contracts/IArtisteRepository.cs
+++ b/Webzine.Repository.Contracts/IArtisteRepository.cs
@@ -39,6 +39,14 @@ namespace Webzine.Repository.Contracts
/// Retourne une collection d'artistes.
IEnumerable FindAll();
+ ///
+ /// 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.
+ ///
+ /// Le numéro de la page à récupérer.
+ /// La taille de chaque page.
+ /// Une liste d'artistes pour la page demandée.
+ IEnumerable FindArtistes(int pageNumber, int pageSize);
+
///
/// Met à jour les informations d'un artiste existant dans la collection.
///
diff --git a/Webzine.Repository/DbArtisteRepository.cs b/Webzine.Repository/DbArtisteRepository.cs
index 2c50cdc..18068bc 100644
--- a/Webzine.Repository/DbArtisteRepository.cs
+++ b/Webzine.Repository/DbArtisteRepository.cs
@@ -200,5 +200,31 @@ namespace Webzine.Repository
throw;
}
}
+
+ ///
+ /// Permet de paginer les artistes en fonction du numéro de page et de la taille de page spécifiés.
+ ///
+ /// Le numéro de la page à récupérer.
+ /// La taille de chaque page.
+ /// Une liste d'artistes pour la page demandée.
+ public IEnumerable 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;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Webzine.Repository/DbTitreRepository.cs b/Webzine.Repository/DbTitreRepository.cs
index 5ae3c9a..d75cb16 100644
--- a/Webzine.Repository/DbTitreRepository.cs
+++ b/Webzine.Repository/DbTitreRepository.cs
@@ -99,15 +99,14 @@ public class DbTitreRepository : ITitreRepository
this.logger.LogDebug("Recherche des titres avec offset: {Offset}, limit: {Limit}", offset, limit);
var titres = this.context.Titres
+ .OrderByDescending(t => t.DateCreation)
+ .ThenBy(t => t.Libelle)
.Include(t => t.Artiste)
.Include(t => t.Styles)
- .OrderBy(t => t.Libelle)
.Skip(offset)
.Take(limit)
- .AsNoTracking()
- .ToList();
+ .AsNoTracking();
- this.logger.LogDebug("{Count} titres trouvés", titres.Count);
return titres;
}
catch (Exception ex)
diff --git a/Webzine.Repository/LocalArtisteRepository.cs b/Webzine.Repository/LocalArtisteRepository.cs
index 1aa7137..cc6f25d 100644
--- a/Webzine.Repository/LocalArtisteRepository.cs
+++ b/Webzine.Repository/LocalArtisteRepository.cs
@@ -106,5 +106,17 @@ namespace Webzine.Repository
{
return this.dataStore.Artistes.Count(predicate);
}
+
+ ///
+ /// Le numéro de la page à récupérer.
+ /// La taille de chaque page.
+ /// Une liste d'artistes pour la page demandée.
+ public IEnumerable FindArtistes(int pageNumber, int pageSize)
+ {
+ return this.dataStore.Artistes
+ .Skip((pageNumber - 1) * pageSize)
+ .Take(pageSize)
+ .ToList();
+ }
}
}
\ No newline at end of file
diff --git a/Webzine.Repository/LocalTitreRepository.cs b/Webzine.Repository/LocalTitreRepository.cs
index b414a62..291e196 100644
--- a/Webzine.Repository/LocalTitreRepository.cs
+++ b/Webzine.Repository/LocalTitreRepository.cs
@@ -49,6 +49,7 @@ public class LocalTitreRepository : ITitreRepository
{
return this.dataStore.Titres
.OrderByDescending(t => t.DateCreation)
+ .ThenBy(t => t.Libelle)
.Skip(offset)
.Take(limit);
}
diff --git a/Webzine.WebApplication/Controllers/AccueilController.cs b/Webzine.WebApplication/Controllers/AccueilController.cs
index 4d15d99..86ee384 100644
--- a/Webzine.WebApplication/Controllers/AccueilController.cs
+++ b/Webzine.WebApplication/Controllers/AccueilController.cs
@@ -21,6 +21,7 @@
///
/// 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,
@@ -36,24 +37,25 @@
///
/// 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()
+ 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 = 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
{
- DerniersTitres = titres.Take(derniereChronique).ToList(),
-
- TopTitres = titres
- .OrderByDescending(t => t.NbLikes)
- .Take(nbTopTitres)
- .ToList(),
+ DerniersTitres = titres_paginé.ToList(),
+ TopTitres = top_titres.ToList(),
+ Page = page,
};
return this.View(vm);
diff --git a/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs b/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs
index 3803f4a..dbf66ff 100644
--- a/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs
+++ b/Webzine.WebApplication/ViewModels/Accueil/AccueilIndexViewModel.cs
@@ -23,8 +23,8 @@
// public int NombreDeTitre { get; set; } = 0;
///
- /// 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.
///
- // public int Pagination { get; set; } = 0;
+ public int Page { get; set; } = 0;
}
}
\ No newline at end of file
diff --git a/Webzine.WebApplication/Views/Accueil/Index.cshtml b/Webzine.WebApplication/Views/Accueil/Index.cshtml
index defe1e8..7160add 100644
--- a/Webzine.WebApplication/Views/Accueil/Index.cshtml
+++ b/Webzine.WebApplication/Views/Accueil/Index.cshtml
@@ -74,9 +74,11 @@
}