#175 Correction des repository : First remplacé par FirstOrDefault. Ajout de la documentation manquante. Les return Model() vides sont supprimés. La gestion d'erreurs est optimisée.
This commit is contained in:
@@ -23,7 +23,7 @@ namespace Webzine.Repository.Contracts
|
|||||||
/// Récupère un artiste par son identifiant unique. Si aucun artiste n'est trouvé, retourne null.
|
/// Récupère un artiste par son identifiant unique. Si aucun artiste n'est trouvé, retourne null.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">L'identifiant de l'artiste.</param>
|
/// <param name="id">L'identifiant de l'artiste.</param>
|
||||||
/// <returns></returns>
|
/// <returns>L'artiste trouvé ou null.</returns>
|
||||||
Artiste Find(int id);
|
Artiste Find(int id);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -2,14 +2,43 @@ namespace Webzine.Repository.Contracts
|
|||||||
{
|
{
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Interface de repository pour les commentaires.
|
||||||
|
/// </summary>
|
||||||
public interface ICommentaireRepository
|
public interface ICommentaireRepository
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Ajoute un commentaire à la source de données.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="commentaire">Commentaire à ajouter.</param>
|
||||||
void Add(Commentaire commentaire);
|
void Add(Commentaire commentaire);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Supprime un commentaire de la source de données.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="commentaire">Commentaire à supprimer.</param>
|
||||||
void Delete(Commentaire commentaire);
|
void Delete(Commentaire commentaire);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Trouve un commentaire par son ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id">ID du commentaire à trouver.</param>
|
||||||
|
/// <returns>Le commentaire trouvé, ou null si non trouvé.</returns>
|
||||||
Commentaire Find(int id);
|
Commentaire Find(int id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retourne tous les commentaires de la source de données.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Une collection de commentaires.</returns>
|
||||||
IEnumerable<Commentaire> FindAll();
|
IEnumerable<Commentaire> FindAll();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Retourne une collection de commentaires paginée à partir de la source de données.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="offset">Le nombre de commentaires à ignorer avant de commencer à
|
||||||
|
/// récupérer les commentaires.</param>
|
||||||
|
/// <param name="limit">Le nombre maximum de commentaires à récupérer.</param>
|
||||||
|
/// <returns>Une collection de commentaires paginée.</returns>
|
||||||
|
IEnumerable<Commentaire> Paginate(int offset, int limit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,6 @@ namespace Webzine.Repository
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialise une classe <see cref="DbArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
|
/// Initialise une classe <see cref="DbArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
|
||||||
/// Utilise <see cref="IArtisteRepository"/> en injection de dépendances. // TODO commentaire faux.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class DbArtisteRepository : IArtisteRepository
|
public class DbArtisteRepository : IArtisteRepository
|
||||||
{
|
{
|
||||||
@@ -23,8 +22,8 @@ namespace Webzine.Repository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="DbArtisteRepository"/> class.
|
/// Initializes a new instance of the <see cref="DbArtisteRepository"/> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="context">Le contexte de base de données à utiliser pour accéder aux entités et effectuer des opérations de
|
/// <param name="context">Le contexte de base de données à utiliser pour accéder aux entités et effectuer des opérations de persistance.</param>
|
||||||
/// persistance. Ne peut pas être null.</param>
|
/// <param name="logger">Le service de journalisation.</param>
|
||||||
public DbArtisteRepository(WebzineDbContext context, ILogger<LocalArtisteRepository> logger)
|
public DbArtisteRepository(WebzineDbContext context, ILogger<LocalArtisteRepository> logger)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
@@ -56,11 +55,6 @@ namespace Webzine.Repository
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (artiste == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(artiste), "L'artiste à supprimer ne peut pas être null.");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.context.Artistes.Remove(artiste);
|
this.context.Artistes.Remove(artiste);
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
this.logger.LogDebug("L'artiste {IdArtiste} a bien été supprimé", artiste.IdArtiste);
|
this.logger.LogDebug("L'artiste {IdArtiste} a bien été supprimé", artiste.IdArtiste);
|
||||||
@@ -125,18 +119,13 @@ namespace Webzine.Repository
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
this.logger.LogError(ex, "Erreur lors de la récupération de tous les artistes.");
|
this.logger.LogError(ex, "Erreur lors de la récupération de tous les artistes.");
|
||||||
return Enumerable.Empty<Artiste>(); // Retourne une liste vide au lieu de faire crash l'UI
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void Update(Artiste artiste)
|
public void Update(Artiste artiste)
|
||||||
{
|
{
|
||||||
if (artiste == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(artiste));
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.context.Artistes.Update(artiste);
|
this.context.Artistes.Update(artiste);
|
||||||
|
|||||||
@@ -16,10 +16,9 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
private readonly WebzineDbContext context;
|
private readonly WebzineDbContext context;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="DbCommentaireRepository"/> class.
|
|
||||||
/// Initialisation de <see cref="DbCommentaireRepository"/>.
|
/// Initialisation de <see cref="DbCommentaireRepository"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>
|
/// <param name="logger">Le service de journalisation.</param>
|
||||||
/// <param name="context">Le contexte de base de données injecté.</param>
|
/// <param name="context">Le contexte de base de données injecté.</param>
|
||||||
public DbCommentaireRepository(ILogger<DbCommentaireRepository> logger, WebzineDbContext context)
|
public DbCommentaireRepository(ILogger<DbCommentaireRepository> logger, WebzineDbContext context)
|
||||||
{
|
{
|
||||||
@@ -33,7 +32,6 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogDebug("Ajout d'un nouveau commentaire de l'auteur : {Auteur}", commentaire.Auteur);
|
|
||||||
this.context.Commentaires.Add(commentaire);
|
this.context.Commentaires.Add(commentaire);
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
this.logger.LogDebug("Commentaire ajouté avec l'id : {Id}", commentaire.IdCommentaire);
|
this.logger.LogDebug("Commentaire ajouté avec l'id : {Id}", commentaire.IdCommentaire);
|
||||||
@@ -55,11 +53,6 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (commentaire == null)
|
|
||||||
{
|
|
||||||
throw new ArgumentNullException(nameof(commentaire), "Le commentaire à supprimer ne peut pas être null.");
|
|
||||||
}
|
|
||||||
|
|
||||||
this.context.Commentaires.Remove(commentaire);
|
this.context.Commentaires.Remove(commentaire);
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
this.logger.LogDebug("Le commentaire {IdCommentaire} a bien été supprimé", commentaire.IdCommentaire);
|
this.logger.LogDebug("Le commentaire {IdCommentaire} a bien été supprimé", commentaire.IdCommentaire);
|
||||||
@@ -76,14 +69,6 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
|
||||||
public int Count()
|
|
||||||
{
|
|
||||||
var count = this.context.Commentaires.Count();
|
|
||||||
this.logger.LogDebug("Compte total des commentaires : {Count}", count);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public Commentaire Find(int idCommentaire)
|
public Commentaire Find(int idCommentaire)
|
||||||
{
|
{
|
||||||
@@ -98,8 +83,6 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerable<Commentaire> FindAll()
|
public IEnumerable<Commentaire> FindAll()
|
||||||
{
|
{
|
||||||
this.logger.LogDebug("Récupération de tous les commentaires");
|
|
||||||
|
|
||||||
var commentaires = this.context.Commentaires
|
var commentaires = this.context.Commentaires
|
||||||
.Include(c => c.Titre)
|
.Include(c => c.Titre)
|
||||||
.OrderByDescending(c => c.DateCreation)
|
.OrderByDescending(c => c.DateCreation)
|
||||||
@@ -110,7 +93,7 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerable<Commentaire> FindCommentaires(int offset, int limit)
|
public IEnumerable<Commentaire> Paginate(int offset, int limit)
|
||||||
{
|
{
|
||||||
this.logger.LogDebug("Recherche paginée des commentaires (offset : {Offset}, limit : {Limit})", offset, limit);
|
this.logger.LogDebug("Recherche paginée des commentaires (offset : {Offset}, limit : {Limit})", offset, limit);
|
||||||
|
|
||||||
@@ -124,18 +107,4 @@ public class DbCommentaireRepository : ICommentaireRepository
|
|||||||
this.logger.LogDebug("{Count} commentaires trouvés pour cette page", commentaires.Count);
|
this.logger.LogDebug("{Count} commentaires trouvés pour cette page", commentaires.Count);
|
||||||
return commentaires;
|
return commentaires;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
|
||||||
public IEnumerable<Commentaire> FindByIdTitre(int idTitre)
|
|
||||||
{
|
|
||||||
this.logger.LogDebug("Recherche des commentaires pour le titre ID : {IdTitre}", idTitre);
|
|
||||||
|
|
||||||
var commentaires = this.context.Commentaires
|
|
||||||
.Where(c => c.Titre.IdTitre == idTitre)
|
|
||||||
.OrderByDescending(c => c.DateCreation)
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
this.logger.LogDebug($"{commentaires.Count} commentaires trouvés pour l'ID de titre : {idTitre}");
|
|
||||||
return commentaires;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -8,10 +8,17 @@ namespace Webzine.Repository
|
|||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Entity.Fixtures;
|
using Webzine.Entity.Fixtures;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe de repository pour les entités de la base de données.
|
||||||
|
/// </summary>
|
||||||
public class DbEntityRepository
|
public class DbEntityRepository
|
||||||
{
|
{
|
||||||
private readonly WebzineDbContext context;
|
private readonly WebzineDbContext context;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constructeur de DbEntityRepository.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="context">DB context.</param>
|
||||||
public DbEntityRepository(WebzineDbContext context)
|
public DbEntityRepository(WebzineDbContext context)
|
||||||
{
|
{
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
|||||||
@@ -93,13 +93,6 @@ public class DbStyleRepository : IStyleRepository
|
|||||||
{
|
{
|
||||||
this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id);
|
this.logger.LogDebug("Recherche du style avec l'ID: {Id}", id);
|
||||||
|
|
||||||
if (id <= 0) // TODO à supprimer, c'est au controller de vérifier la validité de l'id
|
|
||||||
{
|
|
||||||
this.logger.LogWarning("Tentative de recherche d'un style avec un Id invalide: {Id}", id);
|
|
||||||
return new Style(); // TODO pas de retour d'objet vide
|
|
||||||
}
|
|
||||||
|
|
||||||
this.logger.LogDebug("Préparation de la requête avec inclusion des titres");
|
|
||||||
var style = this.context.Styles
|
var style = this.context.Styles
|
||||||
.Include(s => s.Titres)
|
.Include(s => s.Titres)
|
||||||
.FirstOrDefault(s => s.IdStyle == id);
|
.FirstOrDefault(s => s.IdStyle == id);
|
||||||
@@ -107,13 +100,10 @@ public class DbStyleRepository : IStyleRepository
|
|||||||
if (style == null)
|
if (style == null)
|
||||||
{
|
{
|
||||||
this.logger.LogWarning("Style avec l'ID {Id} non trouvé", id);
|
this.logger.LogWarning("Style avec l'ID {Id} non trouvé", id);
|
||||||
style = new Style();
|
return null;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.logger.LogDebug("Style trouvé: {Libelle}", style.Libelle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.logger.LogDebug("Style trouvé: {Libelle}", style.Libelle);
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -151,7 +141,6 @@ public class DbStyleRepository : IStyleRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Mise à jour du style avec l'ID: {IdStyle}", style.IdStyle);
|
this.logger.LogInformation("Mise à jour du style avec l'ID: {IdStyle}", style.IdStyle);
|
||||||
this.logger.LogDebug("Recherche du style en base de données");
|
|
||||||
|
|
||||||
var existingStyle = this.context.Styles.Find(style.IdStyle);
|
var existingStyle = this.context.Styles.Find(style.IdStyle);
|
||||||
if (existingStyle == null)
|
if (existingStyle == null)
|
||||||
@@ -160,8 +149,6 @@ public class DbStyleRepository : IStyleRepository
|
|||||||
throw new InvalidOperationException($"Style avec l'ID {style.IdStyle} non trouvé.");
|
throw new InvalidOperationException($"Style avec l'ID {style.IdStyle} non trouvé.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update properties
|
|
||||||
this.logger.LogDebug("Style trouvé, mise à jour des propriétés");
|
|
||||||
existingStyle.Libelle = style.Libelle;
|
existingStyle.Libelle = style.Libelle;
|
||||||
|
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
|
|||||||
@@ -159,20 +159,14 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Incrémentation du nombre de likes pour le titre ID: {IdTitre}", titre.IdTitre);
|
this.logger.LogInformation("Incrémentation du nombre de likes pour le titre ID: {IdTitre}", titre.IdTitre);
|
||||||
this.logger.LogDebug("Recherche du titre en base de données");
|
|
||||||
|
|
||||||
var existingTitre = this.context.Titres.Find(titre.IdTitre);
|
var existingTitre = this.context.Titres.Find(titre.IdTitre);
|
||||||
if (existingTitre != null)
|
if (existingTitre != null)
|
||||||
{
|
{
|
||||||
this.logger.LogDebug("Titre trouvé, incrémentation du compteur de likes");
|
|
||||||
existingTitre.NbLikes++;
|
existingTitre.NbLikes++;
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
this.logger.LogDebug("Nouveau nombre de likes: {NbLikes}", existingTitre.NbLikes);
|
this.logger.LogDebug("Nouveau nombre de likes: {NbLikes}", existingTitre.NbLikes);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
this.logger.LogWarning("Titre avec l'ID {IdTitre} non trouvé pour l'incrémentation des likes", titre.IdTitre);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (DbUpdateException ex)
|
catch (DbUpdateException ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,22 +10,21 @@ namespace Webzine.Repository
|
|||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialise une classe <see cref="LocalArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
|
/// Initialise une classe <see cref="LocalArtisteRepository"/> qui implémente l'interface <see cref="IArtisteRepository"/>.
|
||||||
/// Utilise <see cref="IArtisteRepository"/> en injection de dépendances. // TODO faux.
|
/// Gère les opérations liées aux artistes en utilisant une source de données locale (en mémoire).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LocalArtisteRepository : IArtisteRepository
|
public class LocalArtisteRepository : IArtisteRepository
|
||||||
{
|
{
|
||||||
private readonly ILogger<LocalArtisteRepository> logger;
|
private readonly ILogger<LocalArtisteRepository> logger;
|
||||||
|
|
||||||
// private readonly List<Artiste> artistes; // TODO code mort
|
|
||||||
private readonly InMemoryDataStore dataStore;
|
private readonly InMemoryDataStore dataStore;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
|
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
|
||||||
/// Est liéee à une liste d'artistes en local et utilise un logger pour enregistrer les opérations effectuées sur les artistes.
|
/// Est liéee à une liste d'artistes en local et utilise un logger pour enregistrer les opérations effectuées sur les artistes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="artistes">La liste des artistes à initialiser. Ne peut pas être null.</param> // TODO pas le bon paramètre
|
|
||||||
/// <param name="logger">Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null.</param>
|
/// <param name="logger">Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null.</param>
|
||||||
|
/// <param name="dataStore">Le magasin de données en mémoire.</param>
|
||||||
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
|
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
@@ -49,11 +48,7 @@ namespace Webzine.Repository
|
|||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public Artiste Find(int id)
|
public Artiste Find(int id)
|
||||||
{
|
{
|
||||||
var artiste = this.dataStore.Artistes.First(a => a.IdArtiste == id);
|
var artiste = this.dataStore.Artistes.SingleOrDefault(a => a.IdArtiste == id);
|
||||||
if (artiste == null)
|
|
||||||
{
|
|
||||||
return new Artiste(); // TODO ne pas retourner un objet vide, FirstOrDefault et gérer le null dans le controller
|
|
||||||
}
|
|
||||||
|
|
||||||
return artiste;
|
return artiste;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ namespace Webzine.Repository
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initialise une classe <see cref="LocalCommentaireRepository"/> qui implémente l'interface <see cref="ICommentaireRepository"/> pour gérer les opérations liées aux commentaires.
|
/// Initialise une classe <see cref="LocalCommentaireRepository"/> qui implémente l'interface <see cref="ICommentaireRepository"/> pour gérer les opérations liées aux commentaires.
|
||||||
/// Utilise <see cref="ICommentaireRepository"/> en injection de dépendances.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class LocalCommentaireRepository : ICommentaireRepository
|
public class LocalCommentaireRepository : ICommentaireRepository
|
||||||
{
|
{
|
||||||
@@ -25,7 +24,7 @@ namespace Webzine.Repository
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="LocalCommentaireRepository"/> class.
|
/// Initializes a new instance of the <see cref="LocalCommentaireRepository"/> class.
|
||||||
/// Initialise une nouvelle instance du <see cref="LocalCommentaireRepository"/> .
|
/// Initialise une nouvelle instance du <see cref="LocalCommentaireRepository"/> .
|
||||||
/// Est liée à un magasin de données en mémoire et utilise un logger pour enregistrer les opérations.
|
/// Gère les opérations liées aux commentaires en utilisant une source de données locale (en mémoire).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="dataStore">Le magasin de données en mémoire. Ne peut pas être null.</param>
|
/// <param name="dataStore">Le magasin de données en mémoire. Ne peut pas être null.</param>
|
||||||
/// <param name="logger">Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null.</param>
|
/// <param name="logger">Le logger à utiliser pour enregistrer les messages de journalisation. Ne peut pas être null.</param>
|
||||||
@@ -47,22 +46,10 @@ namespace Webzine.Repository
|
|||||||
throw new NotSupportedException("Mode Local");
|
throw new NotSupportedException("Mode Local");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
|
||||||
public int Count()
|
|
||||||
{
|
|
||||||
return this.dataStore.Commentaires.Count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public Commentaire Find(int idCommentaire)
|
public Commentaire Find(int idCommentaire)
|
||||||
{
|
{
|
||||||
var commentaire = this.dataStore.Commentaires.FirstOrDefault(c => c.IdCommentaire == idCommentaire);
|
return this.dataStore.Commentaires.FirstOrDefault(c => c.IdCommentaire == idCommentaire);
|
||||||
if (commentaire == null)
|
|
||||||
{
|
|
||||||
return new Commentaire();
|
|
||||||
}
|
|
||||||
|
|
||||||
return commentaire;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
@@ -74,27 +61,13 @@ namespace Webzine.Repository
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public IEnumerable<Commentaire> FindCommentaires(int offset, int limit)
|
public IEnumerable<Commentaire> Paginate(int offset, int limit)
|
||||||
{
|
{
|
||||||
if (offset < 0 || limit <= 0)
|
|
||||||
{
|
|
||||||
return Enumerable.Empty<Commentaire>();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.dataStore.Commentaires
|
return this.dataStore.Commentaires
|
||||||
.OrderByDescending(c => c.DateCreation)
|
.OrderByDescending(c => c.DateCreation)
|
||||||
.Skip(offset)
|
.Skip(offset)
|
||||||
.Take(limit)
|
.Take(limit)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
|
||||||
public IEnumerable<Commentaire> FindByIdTitre(int idTitre)
|
|
||||||
{
|
|
||||||
return this.dataStore.Commentaires
|
|
||||||
.Where(c => c.Titre != null && c.Titre.IdTitre == idTitre)
|
|
||||||
.OrderByDescending(c => c.DateCreation)
|
|
||||||
.ToList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,9 +17,10 @@ public class LocalStyleRepository : IStyleRepository
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="LocalStyleRepository"/> class.
|
/// Initializes a new instance of the <see cref="LocalStyleRepository"/> class.
|
||||||
|
/// Gère les opérations liées aux styles en utilisant une source de données locale (en mémoire).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>
|
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>
|
||||||
/// <param name="styles">La liste de styles à utiliser comme source de données pour le repository.</param>
|
/// <param name="dataStore">Les données en mémoire.</param>
|
||||||
public LocalStyleRepository(ILogger<LocalStyleRepository> logger, InMemoryDataStore dataStore)
|
public LocalStyleRepository(ILogger<LocalStyleRepository> logger, InMemoryDataStore dataStore)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public class LocalTitreRepository : ITitreRepository
|
|||||||
public Titre Find(int idTitre)
|
public Titre Find(int idTitre)
|
||||||
{
|
{
|
||||||
return this.dataStore.Titres
|
return this.dataStore.Titres
|
||||||
.First(t => t.IdTitre == idTitre);
|
.FirstOrDefault(t => t.IdTitre == idTitre);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
|
|||||||
Reference in New Issue
Block a user