#216 : Ajout de la pagination sur la page style.
This commit is contained in:
@@ -72,6 +72,22 @@
|
||||
/// <returns>Une collection de titres correspondant au critère de recherche, triée par libellé.</returns>
|
||||
IEnumerable<Titre> SearchByStyle(string libelle);
|
||||
|
||||
/// <summary>
|
||||
/// Retourne une liste de titre filtré par nom et paginé.
|
||||
/// </summary>
|
||||
/// <param name="offset">Nombre de titres a passer.</param>
|
||||
/// <param name="limit">Nombre de titre récupéré.</param>
|
||||
/// <param name="libelle">Nom du style.</param>
|
||||
/// <returns>Une liste de titre.</returns>
|
||||
IEnumerable<Titre> SearchByStylePaginate(int offset, int limit, string libelle);
|
||||
|
||||
/// <summary>
|
||||
/// Compter le nombre de titres au sein d'un style.
|
||||
/// </summary>
|
||||
/// <param name="libelle">Style de la musique.</param>
|
||||
/// <returns>Un entier.</returns>
|
||||
int CountByStyle(string libelle);
|
||||
|
||||
/// <summary>
|
||||
/// Met à jour un titre dans la liste des titres en fonction de son identifiant. Si aucun titre correspondant à l'identifiant du titre fourni n'est trouvé, un message d'avertissement est enregistré dans les logs et aucune mise à jour n'est effectuée.
|
||||
/// </summary>
|
||||
|
||||
@@ -314,6 +314,20 @@ public class DbTitreRepository : ITitreRepository
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IEnumerable<Titre> SearchByStylePaginate(int offset, int limit, string libelle)
|
||||
{
|
||||
return this.SearchByStyle(libelle).Paginate(offset, limit);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public int CountByStyle(string libelle)
|
||||
{
|
||||
return this.context.Titres
|
||||
.Where(t => t.Styles.Any(s => s.Libelle.ToLower() == libelle.ToLower()))
|
||||
.Count();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public int CountLike()
|
||||
{
|
||||
|
||||
@@ -112,6 +112,20 @@ public class LocalTitreRepository : ITitreRepository
|
||||
.Where(t => t.Styles.Any(s => s.Libelle == libelle));
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IEnumerable<Titre> SearchByStylePaginate(int offset, int limit, string libelle)
|
||||
{
|
||||
return this.SearchByStyle(libelle).Paginate(offset, limit);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public int CountByStyle(string libelle)
|
||||
{
|
||||
return this.dataStore.Titres
|
||||
.Where(t => t.Styles.Any(s => s.Libelle == libelle))
|
||||
.Count();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void Update(Titre titre)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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">
|
||||
<< 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 >>
|
||||
</a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div></div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user