Modification de documentation et suppression de methodes non utilisees.

This commit is contained in:
josephine.vetu
2026-03-28 10:35:38 +01:00
committed by b.nodon
parent 07be5fdfac
commit ef51493c66
12 changed files with 168 additions and 173 deletions

View File

@@ -2,6 +2,9 @@
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
/// <summary>
/// Définit le contexte de la base de données.
/// </summary>
namespace Webzine.EntitiesContext
{
using Microsoft.EntityFrameworkCore;
@@ -20,22 +23,22 @@ namespace Webzine.EntitiesContext
}
/// <summary>
/// Gets Obtient les artistes de la base.
/// Obtient ou définit les artistes de la base.
/// </summary>
public DbSet<Artiste> Artistes => this.Set<Artiste>();
/// <summary>
/// Gets Obtient les styles de la base.
/// Obtient ou définit les styles de la base.
/// </summary>
public DbSet<Style> Styles => this.Set<Style>();
/// <summary>
/// Gets obtient les titres de la base.
/// Obtient ou définit les titres de la base.
/// </summary>
public DbSet<Titre> Titres => this.Set<Titre>();
/// <summary>
/// Gets obtient les commentaires de la base.
/// Obtient ou définit les commentaires de la base.
/// </summary>
public DbSet<Commentaire> Commentaires => this.Set<Commentaire>();

View File

@@ -2,169 +2,168 @@
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.Entity.Fixtures
namespace Webzine.Entity.Fixtures;
using Bogus;
/// <summary>
/// Classe pour générer des données de test locales, telles que des listes d'artistes, de
/// titres, de styles, de commentaires et d'albums, afin de faciliter le peuplement de la base de données
/// et les données lcoales.
/// </summary>
public class SeedDataLocal
{
using Bogus;
public class SeedDataLocal
/// <summary>
/// Génére une liste d'artiste.
/// </summary>
/// <param name="nombre">Nombre d'artiste.</param>
/// <returns>Liste d'artiste.</returns>
public static List<Artiste> GenererListeArtiste(int nombre)
{
public SeedDataLocal()
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));
return artistes.Generate(nombre);
}
/// <summary>
/// Génére une liste de titres.
/// </summary>
/// <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>
/// <returns>Liste de titres.</returns>
public static List<Titre> GenererListeTitre(
int count,
List<Artiste> artistes,
List<Style> styles,
List<string> albums)
{
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))
.RuleFor(t => t.DateSortie, (f, t) => DateTime.SpecifyKind(f.Date.Past(10, t.DateCreation), DateTimeKind.Utc))
.RuleFor(t => t.Duree, f => f.Random.Int(120, 420))
.RuleFor(t => t.UrlJaquette, f => $"https://picsum.photos/seed/{Guid.NewGuid():N}/640/640")
.RuleFor(t => t.UrlEcoute, f => $"https://example.com/listen/{Guid.NewGuid():N}")
.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.Commentaires, f => new List<Commentaire>());
List<Titre> titres = faker.Generate(count);
foreach (Titre titre in titres)
{
}
int nbStyles = random.Next(1, 4);
/// <summary>
/// Generer une liste d'artiste.
/// </summary>
/// <param name="nombre">Nombre d'artiste.</param>
/// <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));
return artistes.Generate(nombre);
}
/// <summary>
/// Generer une liste de titres.
/// </summary>
/// <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)
{
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))
.RuleFor(t => t.DateSortie, (f, t) => DateTime.SpecifyKind(f.Date.Past(10, t.DateCreation), DateTimeKind.Utc))
.RuleFor(t => t.Duree, f => f.Random.Int(120, 420))
.RuleFor(t => t.UrlJaquette, f => $"https://picsum.photos/seed/{Guid.NewGuid():N}/640/640")
.RuleFor(t => t.UrlEcoute, f => $"https://example.com/listen/{Guid.NewGuid():N}")
.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.Commentaires, f => new List<Commentaire>());
List<Titre> titres = faker.Generate(count);
foreach (Titre titre in titres)
{
int nbStyles = random.Next(1, 4);
titre.Styles = styles
.OrderBy(_ => Guid.NewGuid())
.Take(nbStyles)
.ToList();
titre.IdArtiste = titre.Artiste.IdArtiste;
}
return titres;
}
/// <summary>
/// Générer une liste de styles pour seeder la base
/// de données.
/// </summary>
/// <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>
{
"Pop",
"Rock",
"Jazz",
"Blues",
"Hip-Hop",
"Rap",
"Electro",
"Techno",
"House",
"Metal",
"Funk",
"Soul",
"R&B",
"Classique",
"Reggae",
"Punk",
"Folk",
"Disco",
"Ambient",
"Indie",
};
Random random = new Random();
int count = random.Next(minCount, maxCount + 1);
return libelles
.Take(count)
.Select((libelle, index) => new Style
{
IdStyle = index + 1,
Libelle = libelle,
})
titre.Styles = styles
.OrderBy(_ => Guid.NewGuid())
.Take(nbStyles)
.ToList();
titre.IdArtiste = titre.Artiste.IdArtiste;
}
/// <summary>
/// Générer une liste de commentaires pour seeder la base
/// de données.
/// </summary>
/// <param name="titre">Titre.</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, int idStart = 1)
return titres;
}
/// <summary>
/// Génére une liste de styles pour seeder la base
/// de données.
/// </summary>
/// <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>
{
Random random = new Random();
int count = random.Next(min, max + 1);
"Pop",
"Rock",
"Jazz",
"Blues",
"Hip-Hop",
"Rap",
"Electro",
"Techno",
"House",
"Metal",
"Funk",
"Soul",
"R&B",
"Classique",
"Reggae",
"Punk",
"Folk",
"Disco",
"Ambient",
"Indie",
};
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))
.RuleFor(c => c.Titre, _ => titre)
.RuleFor(c => c.IdTitre, _ => titre.IdTitre);
Random random = new Random();
int count = random.Next(minCount, maxCount + 1);
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");
HashSet<string> albums = new HashSet<string>();
while (albums.Count < nombre)
return libelles
.Take(count)
.Select((libelle, index) => new Style
{
albums.Add(faker.Company.CatchPhrase());
}
IdStyle = index + 1,
Libelle = libelle,
})
.ToList();
}
return albums.ToList();
/// <summary>
/// Génére une liste de commentaires pour seeder la base
/// de données.
/// </summary>
/// <param name="titre">Titre.</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, int idStart = 1)
{
Random random = new Random();
int count = random.Next(min, max + 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))
.RuleFor(c => c.Titre, _ => titre)
.RuleFor(c => c.IdTitre, _ => titre.IdTitre);
return faker.Generate(count);
}
/// <summary>
/// Génére 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");
HashSet<string> albums = new HashSet<string>();
while (albums.Count < nombre)
{
albums.Add(faker.Company.CatchPhrase());
}
return albums.ToList();
}
}

View File

@@ -1,11 +1,12 @@
using Microsoft.EntityFrameworkCore;
namespace Webzine.Repository;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Webzine.EntitiesContext;
using Webzine.Entity;
using Webzine.Repository.Contracts;
namespace Webzine.Repository;
/// <summary>
/// Classe qui implémente le repository pour les commentaires en utilisant une base de données.
/// </summary>

View File

@@ -1,7 +1,7 @@
namespace Webzine.WebApplication.Areas.Administration.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
@@ -68,7 +68,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
/// <summary>
/// Effectue la suppression réelle du commentaire.
/// </summary>
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
/// <param name="model">Le CommentaireDeleteViewModel.</param>
/// <returns>Redirection vers la vue Index après suppression.</returns>
[HttpPost]
public IActionResult Delete(CommentaireDeleteViewModel model)

View File

@@ -1,7 +1,5 @@
using System.Diagnostics;
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Entity.Fixtures;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels;

View File

@@ -1,6 +1,7 @@
namespace Webzine.WebApplication.Areas.Administration.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;

View File

@@ -1,14 +1,13 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Webzine.Entity;
using Webzine.Entity.Fixtures;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
namespace Webzine.WebApplication.Areas.Administration.Controllers;
/// <summary>
/// Contrôleur pour la gestion des titres en administration. Ce contrôleur gère les opérations de création, modification, suppression et affichage des titres dans l'interface d'administration du webzine. Les données sont générées dynamiquement à l'aide de la classe <see cref="DataFactory"/> pour simuler un environnement de développement sans accès à une base de données réelle. Chaque action du contrôleur prépare un ViewModel spécifique pour la vue correspondante, permettant ainsi une séparation claire entre la logique métier et la présentation des données.
/// Contrôleur pour la gestion des titres en administration. Ce contrôleur gère les opérations de création, modification, suppression et affichage des titres dans l'interface d'administration du webzine. Chaque action du contrôleur prépare un ViewModel spécifique pour la vue correspondante, permettant ainsi une séparation claire entre la logique métier et la présentation des données.
/// </summary>
[Area("Administration")]
public class TitreController : Controller

View File

@@ -2,6 +2,7 @@
{
/// <summary>
/// ViewModel pour la création et la modification d'un artiste dans l'administration.
/// Ne contient pas les titres de l'artiste.
/// </summary>
public class AdminArtisteForm
{

View File

@@ -1,8 +1,4 @@
// <copyright file="AccueilController.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Controllers
namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
@@ -48,8 +44,6 @@ namespace Webzine.WebApplication.Controllers
var derniereChronique = this.configuration.GetValue<int>("Webzine:NombreDerniereChronique");
var nbTopTitres = this.configuration.GetValue<int>("Webzine:NombreDeTopTitres");
// var titres = FakeDataFactory.GetTitres();
// var titres = this.titreRepository.FindTitres(derniereChronique, nbTopTitres);
var titres = this.titreRepository.FindAll();
var vm = new AccueilIndexViewModel

View File

@@ -2,7 +2,6 @@
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity.Fixtures;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Artiste;

View File

@@ -1,6 +1,7 @@
namespace Webzine.WebApplication.ViewComponents
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
/// <summary>

View File

@@ -27,7 +27,6 @@
</a>
</li>
@* TODO : Modifier, il s'agit d'une liste *@
<li class="nav-item">
@* <a class="nav-link" href="#">
<i class="fa-solid fa-screwdriver-wrench"></i> Administration