#211 : Optimisation de la recherche des dernières chroniques et des titres les plus populaires.

This commit is contained in:
Loic Masi
2026-04-08 18:38:46 +02:00
parent 6118aa9af8
commit b754d0104b
4 changed files with 94 additions and 6 deletions

View File

@@ -107,5 +107,19 @@
/// </summary> /// </summary>
/// <returns>Un tuple contenant l'identifiant et le libellé du titre le plus joué, ou null si aucun titre n'existe.</returns> /// <returns>Un tuple contenant l'identifiant et le libellé du titre le plus joué, ou null si aucun titre n'existe.</returns>
(int IdTitre, string Libelle)? FindMostPlayedTitle(); (int IdTitre, string Libelle)? FindMostPlayedTitle();
/// <summary>
/// Récupération des chroniques.
/// </summary>
/// <param name="offset">Nombre d'éléments.</param>
/// <param name="limit">Limite d'éléments.</param>
/// <returns>Liste des derniers titres chroniqués.</returns>
IEnumerable<Titre> DerniereChronique(int offset, int limit);
/// <summary>
/// Récupération du top titre liké.
/// </summary>
/// <returns>Liste de titre les plus likés.</returns>
IEnumerable<Titre> TopTitre(int offset, int limit);
} }
} }

View File

@@ -409,4 +409,45 @@ public class DbTitreRepository : ITitreRepository
throw; throw;
} }
} }
/// <inheritdoc/>
public IEnumerable<Titre> DerniereChronique(int offset, int limit)
{
try
{
this.logger.LogInformation("Récupération des dernières chroniques.");
return this.context.Titres
.AsNoTracking()
.OrderByDescending(t => t.DateCreation)
.Paginate(offset, limit)
.Include(t => t.Artiste);
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors de la recuperation des dernieres chroniques.");
throw;
}
}
/// <inheritdoc/>
public IEnumerable<Titre> TopTitre(int offset, int limit)
{
try
{
this.logger.LogInformation("Récupération du Top Titre.");
var titres = this.context.Titres
.AsNoTracking()
.OrderByDescending(t => t.NbLikes)
.Paginate(offset, limit)
.Include(a => a.Artiste);
return titres;
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors de la récupération du Top Titre.");
throw;
}
}
} }

View File

@@ -181,4 +181,39 @@ public class LocalTitreRepository : ITitreRepository
return titre == null ? null : (titre.IdTitre, titre.Libelle); return titre == null ? null : (titre.IdTitre, titre.Libelle);
} }
/// <inheritdoc/>
public IEnumerable<Titre> DerniereChronique(int offset, int limit)
{
try
{
return this.dataStore.Titres
.OrderByDescending(t => t.DateCreation)
.Paginate(offset, limit);
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors de la recuperation des dernieres chroniques.");
throw;
}
}
/// <inheritdoc/>
public IEnumerable<Titre> TopTitre(int offset, int limit)
{
try
{
this.logger.LogInformation("Récupération du Top Titre.");
var titres = this.dataStore.Titres
.OrderByDescending(t => t.NbLikes)
.Paginate(offset, limit);
return titres;
}
catch (Exception ex)
{
this.logger.LogError(ex, "Erreur lors de la récupération du Top Titre.");
throw;
}
}
} }

View File

@@ -47,15 +47,13 @@
var totalTitres = this.titreRepository.Count(); var totalTitres = this.titreRepository.Count();
var totalPages = (int)Math.Ceiling((double)totalTitres / derniereChronique); var totalPages = (int)Math.Ceiling((double)totalTitres / derniereChronique);
var titresPagines = this.titreRepository.FindTitres(page * derniereChronique, derniereChronique); var titresPagines = this.titreRepository.DerniereChronique(page * derniereChronique, derniereChronique).ToList();
var topTitres = this.titreRepository.FindAll() var topTitres = this.titreRepository.TopTitre(nbTopTitres, nbTopTitres).ToList();
.OrderByDescending(t => t.NbLikes)
.Take(nbTopTitres);
var vm = new AccueilIndexViewModel var vm = new AccueilIndexViewModel
{ {
DerniersTitres = titresPagines.ToList(), DerniersTitres = titresPagines,
TopTitres = topTitres.ToList(), TopTitres = topTitres,
Page = page, Page = page,
TotalPages = totalPages, TotalPages = totalPages,
}; };