Merge branch 'j3/feat/pagination' into dev.

This commit is contained in:
Loic Masi
2026-04-09 11:39:40 +02:00
6 changed files with 99 additions and 4 deletions

View File

@@ -67,17 +67,25 @@ namespace Webzine.WebApplication.Controllers
/// Affiche les titres correspondant a un style musical donne.
/// </summary>
/// <param name="style">Nom du style musical.</param>
/// <param name="page">Numéro de la page.</param>
/// <returns>Vue contenant la liste filtree.</returns>
public IActionResult Style(string style)
[Route("/titres/styles/{style}", Name = "TitresParStyle")]
public IActionResult Style(string style, int page = 0)
{
this.logger.LogInformation("Recherche des titres pour le style : {Style}.", style);
var offset = page * 10;
var limit = 10;
var titresFiltres = this.titreRepository.SearchByStylePaginate(offset, limit, style).ToList();
var totalTitres = this.titreRepository.CountByStyle(style);
var totalPages = (int)Math.Ceiling((double)totalTitres / limit);
var titresFiltres = this.titreRepository.SearchByStyle(style).ToList();
this.logger.LogInformation("Recherche des titres pour le style : {Style}.", style);
var vm = new TitreStyle
{
StyleName = style,
Titres = titresFiltres.Select(MapTitreItem).ToList(),
Page = page,
TotalPages = totalPages,
};
return this.View(vm);

View File

@@ -14,4 +14,14 @@ public class TitreStyle
/// Définit la liste des items de titre associés au style musical.
/// </summary>
public List<TitreStyleItem> Titres { get; set; } = new ();
/// <summary>
/// Obtient ou définit le numéro de page pour la pagination des titres affichés sur la page d'accueil.
/// </summary>
public int Page { get; set; }
/// <summary>
/// Nombre total de page.
/// </summary>
public int TotalPages { get; set; }
}

View File

@@ -29,7 +29,7 @@
<a asp-action="Index"
asp-route-id="@titre.IdTitre"
class="me-3 text-black">
<img src="@titre.UrlJaquette" alt="@titre.Libelle" width="70px" height="70px" class="object-fit-cover" loading="lazy"/>
<img src="@titre.UrlJaquette" alt="@titre.Libelle" width="70px" height="70px" class="object-fit-cover" loading="lazy" />
</a>
<!-- Infos -->
@@ -55,6 +55,39 @@
</div>
}
}
<div class="d-flex align-items-center justify-content-between mt-3">
@if (Model.Page > 0)
{
<a asp-route="TitresParStyle"
asp-route-style="@Model.StyleName"
asp-route-page="@(Model.Page - 1)"
class="btn btn-secondary">
&lt;&lt; Titre plus récent
</a>
}
else
{
<div></div>
}
<p class="mb-0">
Page : @(Model.Page + 1) sur @Model.TotalPages
</p>
@if (Model.Page < Model.TotalPages - 1)
{
<a asp-route="TitresParStyle"
asp-route-style="@Model.StyleName"
asp-route-page="@(Model.Page + 1)"
class="btn btn-secondary">
Titre plus anciens &gt;&gt;
</a>
}
else
{
<div></div>
}
</div>
</div>
</div>
</div>