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

View File

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

View File

@@ -1,15 +1,32 @@
using System; using Webzine.Entity;
using System.Collections.Generic;
using System.Text;
using Webzine.Entity;
namespace Webzine.Repository 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 public class InMemoryDataStore
{ {
/// <summary>
/// Obtient ou définit la liste des artistes enregistrés.
/// </summary>
public List<Artiste> Artistes { get; set; } = new(); 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(); 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(); 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(); 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> /// <returns>La vue Index avec le ViewModel contenant la liste des titres.</returns>
public IActionResult Index() 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, Id = t.IdTitre,
Artiste = t.Artiste.Nom, Nom = t.Artiste.Nom,
Titre = t.Libelle, Titre = t.Libelle,
Duree = TimeSpan.FromSeconds(t.Duree).ToString(@"mm\:ss"), Duree = TimeSpan.FromSeconds(t.Duree).ToString(@"mm\:ss"),
DateSortie = t.DateSortie, DateSortie = t.DateSortie,
NbLectures = t.NbLectures, NbLectures = t.NbLectures,
NbLikes = t.NbLikes, NbLikes = t.NbLikes,
NbCommentaires = t.Commentaires.Count, NbCommentaires = t.Commentaires?.Count ?? 0,
}).ToList(); }).ToList();
return this.View(model); return this.View(model);

View File

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

View File

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

View File

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