#192 Pagination des pages admin. On peut passer à la page précédente seulement si le numéro de page est >0 et la dernière page n'affiche pas de bouton pour la page suivante.

This commit is contained in:
josephine.vetu
2026-04-03 15:22:24 +02:00
parent 9e0a9751d1
commit 279fd75459
27 changed files with 346 additions and 77 deletions

View File

@@ -208,28 +208,23 @@ namespace Webzine.Repository
}
}
/// <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)
/// <inheritdoc/>
public IEnumerable<Artiste> FindArtistes(int offset, int limit)
{
try
{
var artistes = this.context.Artistes
.AsNoTracking()
.OrderBy(a => a.Nom)
.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);
.Skip(offset)
.Take(limit);
this.logger.LogDebug("Page {PageNumber} d'artistes récupérée avec {PageSize} artistes par page.", offset, limit);
return artistes;
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors de la pagination des artistes. Page: {PageNumber}, Taille: {PageSize}", pageNumber, pageSize);
this.logger.LogError(ex, "Erreur lors de la pagination des artistes. Page: {PageNumber}, Taille: {PageSize}", offset, limit);
throw;
}
}

View File

@@ -114,4 +114,19 @@ public class DbCommentaireRepository : ICommentaireRepository
throw new Exception("Une erreur est survenue lors de la pagination des commentaires.", ex);
}
}
/// <inheritdoc/>
public int Count()
{
try
{
this.logger.LogDebug("Comptage du nombre total de commentaires");
return Enumerable.Count(this.context.Commentaires);
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors du comptage des commentaires");
throw new Exception("Une erreur est survenue lors du comptage des commentaires.", ex);
}
}
}

View File

@@ -182,4 +182,27 @@ public class DbStyleRepository : IStyleRepository
throw;
}
}
/// <inheritdoc/>
public IEnumerable<Style> FindStyles(int offset, int limit)
{
try
{
this.logger.LogDebug("Récupération paginée des styles (offset: {Offset}, limit: {Limit})", offset, limit);
var styles = this.context.Styles
.AsNoTracking()
.OrderBy(s => s.Libelle)
.Skip(offset)
.Take(limit);
this.logger.LogDebug("La liste paginée de styles a été récupérée.");
return styles;
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors de la récupération paginée des styles (offset: {Offset}, limit: {Limit})", offset, limit);
throw;
}
}
}

View File

@@ -233,17 +233,14 @@ public class DbTitreRepository : ITitreRepository
try
{
this.logger.LogInformation("Recherche des titres avec le mot-clé: {Mot}", mot);
this.logger.LogDebug("Préparation de la requête de recherche avec les inclusions");
var titres = this.context.Titres
.Include(t => t.Artiste)
.Include(t => t.Styles)
.Where(t => t.Libelle.ToLower().Contains(mot.ToLower()))
.OrderBy(t => t.Libelle)
.AsNoTracking()
.ToList();
.AsNoTracking();
this.logger.LogDebug("{Count} titres trouvés correspondant à '{Mot}'", titres.Count, mot);
return titres;
}
catch (Exception ex)
@@ -264,7 +261,7 @@ public class DbTitreRepository : ITitreRepository
.Include(t => t.Artiste)
.Include(t => t.Styles)
.Include(t => t.Commentaires)
.FirstOrDefault(t => t.IdTitre == idTitre);
.SingleOrDefault(t => t.IdTitre == idTitre);
return titre;
}
@@ -293,9 +290,9 @@ public class DbTitreRepository : ITitreRepository
.Include(t => t.Styles)
.Include(t => t.Commentaires)
.OrderBy(t => t.Libelle)
.ToList();
.AsNoTracking();
this.logger.LogDebug("{Count} titres récupérés", titres.Count);
this.logger.LogDebug("{Count} titres récupérés", titres.Count());
return titres;
}
catch (Exception ex)
@@ -318,9 +315,9 @@ public class DbTitreRepository : ITitreRepository
.Include(t => t.Styles)
.Where(t => t.Styles.Any(s => s.Libelle.ToLower() == libelle.ToLower()))
.OrderBy(t => t.Libelle)
.ToList();
.AsNoTracking();
this.logger.LogDebug("{Count} titres trouvés pour le style '{Libelle}'", titres.Count, libelle);
this.logger.LogDebug("{Count} titres trouvés pour le style '{Libelle}'", titres.Count(), libelle);
return titres;
}
catch (Exception ex)

View File

@@ -108,14 +108,12 @@ namespace Webzine.Repository
}
/// <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)
public IEnumerable<Artiste> FindArtistes(int offset, int limit)
{
return this.dataStore.Artistes
.Skip((pageNumber - 1) * pageSize)
.Take(pageSize)
.OrderBy(a => a.Nom)
.Skip(offset)
.Take(limit)
.ToList();
}
}

View File

@@ -66,5 +66,11 @@ namespace Webzine.Repository
.Skip(offset)
.Take(limit);
}
/// <inheritdoc/>
public int Count()
{
return this.dataStore.Commentaires.Count;
}
}
}

View File

@@ -71,4 +71,14 @@ public class LocalStyleRepository : IStyleRepository
{
return this.dataStore.Styles.Count;
}
/// <inheritdoc/>
public IEnumerable<Style> FindStyles(int offset, int limit)
{
return this.dataStore.Styles
.OrderBy(s => s.Libelle)
.Skip(offset)
.Take(limit)
.ToList();
}
}