#131 Fix de l'affichage des modifications car les id de tous les éléments des listes sont égaux à 0. Ajout de la génération des id dans la SeedDbLocal + les commentaires sont ajoutés aux titres directement dans le seed. Correction de documentation de méthodes.

This commit is contained in:
josephine.vetu
2026-03-27 13:24:00 +01:00
parent 712d27af65
commit 7f5bfd1bb8
7 changed files with 67 additions and 45 deletions

View File

@@ -19,7 +19,9 @@ namespace Webzine.Entity.Fixtures
/// <returns>Liste d'artiste.</returns>
public static List<Artiste> GenererListeArtiste(int nombre)
{
int idStart = 1;
Faker<Artiste> artistes = new Faker<Artiste>("fr")
.RuleFor(a => a.IdArtiste, f => f.IndexFaker + idStart) // Créé les id des artistes de manière incrémentale
.RuleFor(a => a.Nom, f => f.Person.FullName)
.RuleFor(a => a.Biographie, f => f.Lorem.Paragraph(2));
@@ -27,21 +29,27 @@ namespace Webzine.Entity.Fixtures
}
/// <summary>
/// Generer une liste de titre.
/// Generer une liste de titres.
/// </summary>
/// <param name="count">Nombre de titre à créer.</param>
/// <param name="artistes">Liste d'artiste.</param>
/// <param name="styles">Liste de style.</param>
/// <returns>Liste de titre.</returns>
/// <param name="count">Nombre de titres à créer.</param>
/// <param name="artistes">Liste d'artistes.</param>
/// <param name="styles">Liste de styles.</param>
/// <param name="albums">Liste d'albums.</param>
/// <param name="commentaires">Liste de commentaires.</param>
/// <returns>Liste de titres.</returns>
public static List<Titre> GenererListeTitre(
int count,
List<Artiste> artistes,
List<Style> styles,
List<string> albums)
List<string> albums,
List<Commentaire> commentaires
)
{
Random random = new Random();
int idStart = 1;
Faker<Titre> faker = new Faker<Titre>("fr")
.RuleFor(a => a.IdTitre, f => f.IndexFaker + idStart)
.RuleFor(t => t.Libelle, f => f.Lorem.Sentence(3).Replace(".", string.Empty))
.RuleFor(t => t.Chronique, f => f.Lorem.Paragraphs(3))
.RuleFor(t => t.DateCreation, f => DateTime.SpecifyKind(f.Date.Recent(120), DateTimeKind.Utc))
@@ -52,8 +60,8 @@ namespace Webzine.Entity.Fixtures
.RuleFor(t => t.NbLectures, f => f.Random.Int(0, 5000))
.RuleFor(t => t.NbLikes, f => f.Random.Int(0, 1000))
.RuleFor(t => t.Album, f => f.PickRandom(albums))
.RuleFor(t => t.Artiste, f => f.PickRandom(artistes));
.RuleFor(t => t.Artiste, f => f.PickRandom(artistes))
.RuleFor(t => t.Commentaires, f => commentaires ?? new List<Commentaire>());
List<Titre> titres = faker.Generate(count);
foreach (Titre titre in titres)
@@ -72,10 +80,12 @@ namespace Webzine.Entity.Fixtures
}
/// <summary>
/// Générer une liste de style pour seeder la base
/// Générer une liste de styles pour seeder la base
/// de données.
/// </summary>
/// <returns>Liste de style.</returns>
/// <param name="minCount">Le nombre minimum de styles pouvant être créés.</params>
/// <param name="maxCount">Le nombre maximun de styles pouvant être créés.</params>
/// <returns>Liste de styles.</returns>
public static List<Style> GenererListeStyle(int minCount = 15, int maxCount = 20)
{
List<string> libelles = new List<string>
@@ -107,26 +117,30 @@ namespace Webzine.Entity.Fixtures
return libelles
.Take(count)
.Select(libelle => new Style
.Select((libelle, index) => new Style
{
IdStyle = index + 1,
Libelle = libelle,
})
.ToList();
}
/// <summary>
/// Seeder pour la base de données.
/// Générer une liste de commentaires pour seeder la base
/// de données.
/// </summary>
/// <param name="titre">Titre.</param>
/// <param name="min">Min.</param>
/// <param name="max">Max.</param>
/// <param name="min">Le nombre minimum de commentaires pouvant être créés. La valeur par défaut est 0.</params>
/// <param name="max">Le nombre maximun de commentaires pouvant être créés. La valeur par défaut est 5.</params>
/// <returns>Liste de commentaire.</returns>
public static List<Commentaire> GenererListeCommentaire(Titre titre, int min = 0, int max = 5)
{
Random random = new Random();
int count = random.Next(min, max + 1);
int idStart = 1;
Faker<Commentaire> faker = new Faker<Commentaire>("fr")
.RuleFor(a => a.IdCommentaire, f => f.IndexFaker + idStart)
.RuleFor(c => c.Auteur, f => f.Internet.UserName())
.RuleFor(c => c.Contenu, f => f.Lorem.Sentences(2))
.RuleFor(c => c.DateCreation, f => DateTime.SpecifyKind(f.Date.Recent(60), DateTimeKind.Utc))
@@ -136,6 +150,12 @@ namespace Webzine.Entity.Fixtures
return faker.Generate(count);
}
/// <summary>
/// Générer une liste d'albums pour seeder la base
/// de données.
/// </summary>
/// <param name="nombre">Le nombre d'albums à générer.</param>
/// <returns>Liste d'albums.</returns>
public static List<string> GenererListeAlbums(int nombre)
{
Faker faker = new Faker("fr");

View File

@@ -24,15 +24,11 @@ namespace Webzine.Repository
/// <param name="nbTitres">Nombre de titre.</param>
/// <param name="minStyles">Nombre min de style.</param>
/// <param name="maxStyles">Nombre mac de style.</param>
/// <param name="minCommentairesParTitre">Min commentaire par titre.</param>
/// <param name="maxCommentairesParTitre">Max commentaire par titre</param>
public void SeedBaseDeDonnees(
int nbArtistes = 100,
int nbTitres = 500,
int minStyles = 15,
int maxStyles = 20,
int minCommentairesParTitre = 0,
int maxCommentairesParTitre = 5)
int maxStyles = 20)
{
if (this.context.Artistes.Any() ||
this.context.Titres.Any() ||
@@ -50,23 +46,11 @@ namespace Webzine.Repository
this.context.SaveChanges();
List<string> albums = SeedDataLocal.GenererListeAlbums(3);
List<Titre> titres = SeedDataLocal.GenererListeTitre(nbTitres, artistes, styles, albums);
List<Commentaire> commentaires = new List<Commentaire>();
List<Titre> titres = SeedDataLocal.GenererListeTitre(nbTitres, artistes, styles, albums, commentaires);
this.context.Titres.AddRange(titres);
this.context.SaveChanges();
List<Commentaire> commentaires = new List<Commentaire>();
foreach (Titre titre in titres)
{
commentaires.AddRange(
SeedDataLocal.GenererListeCommentaire(
titre,
minCommentairesParTitre,
maxCommentairesParTitre));
}
this.context.Commentaires.AddRange(commentaires);
this.context.SaveChanges();
}
}

View File

@@ -1,15 +1,32 @@
using System;
using System.Collections.Generic;
using System.Text;
using Webzine.Entity;
using Webzine.Entity;
namespace Webzine.Repository
{
/// <summary>
/// Représente un entrepôt de données en mémoire (Mock) pour l'application.
/// Cette classe simule une base de données en stockant les entités dans des listes statiques
/// durant le cycle de vie de l'application.
/// </summary>
public class InMemoryDataStore
{
/// <summary>
/// Obtient ou définit la liste des artistes enregistrés.
/// </summary>
public List<Artiste> Artistes { get; set; } = new();
/// <summary>
/// Obtient ou définit la liste des titres (morceaux) musicaux.
/// </summary>
public List<Titre> Titres { get; set; } = new();
/// <summary>
/// Obtient ou définit la liste des styles musicaux disponibles.
/// </summary>
public List<Style> Styles { get; set; } = new();
/// <summary>
/// Obtient ou définit la liste des commentaires rédigés par les utilisateurs.
/// </summary>
public List<Commentaire> Commentaires { get; set; } = new();
}
}
}

View File

@@ -40,16 +40,18 @@ public class TitreController : Controller
/// <returns>La vue Index avec le ViewModel contenant la liste des titres.</returns>
public IActionResult Index()
{
var model = this.titreRepository.FindAll().Take(10).Select(t => new AdminTitreList
IEnumerable<Titre> titres = this.titreRepository.FindAll().Take(10);
var model = titres.Select(t => new AdminTitreList
{
Id = t.IdTitre,
Artiste = t.Artiste.Nom,
Nom = t.Artiste.Nom,
Titre = t.Libelle,
Duree = TimeSpan.FromSeconds(t.Duree).ToString(@"mm\:ss"),
DateSortie = t.DateSortie,
NbLectures = t.NbLectures,
NbLikes = t.NbLikes,
NbCommentaires = t.Commentaires.Count,
NbCommentaires = t.Commentaires?.Count ?? 0,
}).ToList();
return this.View(model);

View File

@@ -13,7 +13,7 @@ namespace Webzine.WebApplication.Areas.Administration.ViewModels.Titre
/// <summary>
/// Définit le nom de l'artiste associé au titre.
/// </summary>
public string Artiste { get; set; }
public string Nom { get; set; }
/// <summary>
/// Définit le titre du titre.

View File

@@ -33,7 +33,7 @@
@foreach (var item in Model)
{
<tr>
<td>@item.Artiste</td>
<td>@item.Nom</td>
<td>@item.Titre</td>
<td>@item.Duree</td>
<td>@item.DateSortie.ToString("dd/MM/yyyy")</td>

View File

@@ -98,9 +98,8 @@ try
var artistes = SeedDataLocal.GenererListeArtiste(100);
var styles = SeedDataLocal.GenererListeStyle(15, 20);
var albums = SeedDataLocal.GenererListeAlbums(50);
var titres = SeedDataLocal.GenererListeTitre(500, artistes, styles, albums);
var commentaires = new List<Commentaire>();
var titres = SeedDataLocal.GenererListeTitre(500, artistes, styles, albums, commentaires);
foreach (var titre in titres)
{