Commande dotnet format

This commit is contained in:
josephine.vetu
2026-03-28 10:09:18 +01:00
parent 291a008d8d
commit d5dd75ed9d
51 changed files with 265 additions and 228 deletions

View File

@@ -5,6 +5,7 @@
namespace Webzine.EntitiesContext
{
using Microsoft.EntityFrameworkCore;
using Webzine.Entity;
public class WebzineDbContext : DbContext
@@ -14,7 +15,9 @@ namespace Webzine.EntitiesContext
/// </summary>
/// <param name="options">Options.</param>
public WebzineDbContext(DbContextOptions<WebzineDbContext> options)
: base(options) { }
: base(options)
{
}
/// <summary>
/// Gets Obtient les artistes de la base.

View File

@@ -3,6 +3,7 @@ namespace Webzine.Entity.Tests
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;
/// <summary>
@@ -13,8 +14,8 @@ namespace Webzine.Entity.Tests
/// <summary>
/// Vérifie que l'entité possède bien la propriété passée en paramètre.
/// </summary>
/// <param name="typeObjet">type de l'entité</param>
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
/// <param name="typeObjet">type de l'entité.</param>
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
public static void HasProperty(Type typeObjet, string nomPropriete)
{
var property = typeObjet.GetProperty(nomPropriete);
@@ -24,9 +25,9 @@ namespace Webzine.Entity.Tests
/// <summary>
/// Vérifie que l'attribut de l'entité a l'annotation [Display(Name = "xxx")] avec la valeur attendue.
/// </summary>
/// <param name="typeObjet">type de l'entité</param>
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
/// <param name="chaineAttendue">valeur attendue pour l'affichage de cette propriété</param>
/// <param name="typeObjet">type de l'entité.</param>
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
/// <param name="chaineAttendue">valeur attendue pour l'affichage de cette propriété.</param>
public static void AttributDisplay(Type typeObjet, string nomPropriete, string chaineAttendue)
{
var property = typeObjet.GetProperty(nomPropriete);
@@ -38,9 +39,9 @@ namespace Webzine.Entity.Tests
/// <summary>
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
/// </summary>
/// <param name="typeObjet">type de l'entité</param>
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
/// <param name="max">longueur maximum</param>
/// <param name="typeObjet">type de l'entité.</param>
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
/// <param name="max">longueur maximum.</param>
public static void AttributLongueurMax(Type typeObjet, string nomPropriete, int max)
{
var property = typeObjet.GetProperty(nomPropriete);
@@ -52,9 +53,9 @@ namespace Webzine.Entity.Tests
/// <summary>
/// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue.
/// </summary>
/// <param name="typeObjet">type de l'entité</param>
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
/// <param name="min">longueur minimum</param>
/// <param name="typeObjet">type de l'entité.</param>
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
/// <param name="min">longueur minimum.</param>
public static void AttributLongueurMin(Type typeObjet, string nomPropriete, int min)
{
var property = typeObjet.GetProperty(nomPropriete);
@@ -66,8 +67,8 @@ namespace Webzine.Entity.Tests
/// <summary>
/// Vérifie que l'attribut de l'entité a l'annotation [Required].
/// </summary>
/// <param name="typeObjet">type de l'entité</param>
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
/// <param name="typeObjet">type de l'entité.</param>
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
public static void AttributRequis(Type typeObjet, string nomPropriete)
{
var property = typeObjet.GetProperty(nomPropriete);
@@ -78,8 +79,8 @@ namespace Webzine.Entity.Tests
/// <summary>
/// Vérifie que l'attribut de l'entité n'a pas l'annotation [Url].
/// </summary>
/// <param name="typeObjet">type de l'entité</param>
/// <param name="nomPropriete">nom de la propriété de l'entité</param>
/// <param name="typeObjet">type de l'entité.</param>
/// <param name="nomPropriete">nom de la propriété de l'entité.</param>
public static void AttributHasNotUrlValidation(Type typeObjet, string nomPropriete)
{
var property = typeObjet.GetProperty(nomPropriete);

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
namespace Webzine.Entity
namespace Webzine.Entity
{
using System.ComponentModel.DataAnnotations;
/// <summary>
/// Classe représentant un artiste.
/// Lien avec l'entité <see cref="Titre"/> : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
namespace Webzine.Entity
namespace Webzine.Entity
{
using System.ComponentModel.DataAnnotations;
/// <summary>
/// Classe représentant un commentaire laissé par un utilisateur sur un titre.
/// Lien avec l'entité <see cref="Titre"/> : un titre peut avoir plusieurs commentaires, mais un commentaire n'a qu'un seul titre.

View File

@@ -1,7 +1,7 @@
using Bogus;
namespace Webzine.Entity.Fixtures
namespace Webzine.Entity.Fixtures
{
using Bogus;
/// <summary>
/// Factory pour générer des artistes avec des titres associés, à l'aide de la bibliothèque Bogus.
/// </summary>
@@ -18,7 +18,7 @@ namespace Webzine.Entity.Fixtures
var albumsData = new[]
{
new { Nom = "Bohemian Rhapsody", Image = "https://upload.wikimedia.org/wikipedia/en/9/9f/Bohemian_Rhapsody.png" },
new { Nom = "Born This Way", Image = "https://static.wikia.nocookie.net/ladygaga/images/2/2d/BornThisWay-DeluxeEdition.jpg/revision/latest/scale-to-width-down/3500?cb=20111120030308" }
new { Nom = "Born This Way", Image = "https://static.wikia.nocookie.net/ladygaga/images/2/2d/BornThisWay-DeluxeEdition.jpg/revision/latest/scale-to-width-down/3500?cb=20111120030308" },
};
var faker = new Bogus.Faker("fr");

View File

@@ -2,12 +2,11 @@
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
using Bogus;
namespace Webzine.Entity.Fixtures
{
using Bogus;
public class CommentaireFactory
{
}
}

View File

@@ -1,11 +1,13 @@
namespace Webzine.Entity.Fixtures;
using Entity;
using Faker;
using System;
using System.Collections.Generic;
using System.Linq;
using Entity;
using Faker;
public class DataFactory
{
/// <summary>
@@ -14,54 +16,69 @@ public class DataFactory
public Dictionary<string, (string TrackUrl, string ImageUrl)> RealMusicData { get; set; }
= new Dictionary<string, (string TrackUrl, string ImageUrl)>
{
{ "juliana_chahayed_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8") },
{ "mister_v_1", ("https://youtu.be/JeqUw7sGUK8?si=FnmFR2EgkVY6MhqQ",
"https://img.youtube.com/vi/JeqUw7sGUK8/maxresdefault.jpg") },
{ "compagnie_creole_1", ("https://youtu.be/wfxt1SGWAI8",
"https://img.youtube.com/vi/wfxt1SGWAI8/maxresdefault.jpg") },
{ "femto_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8") },
{ "chat_noir_1", ("https://youtu.be/OTi4-q-_Tj0?si=SNnLd-6Y893nL5Au",
"https://img.youtube.com/vi/OTi4-q-_Tj0/maxresdefault.jpg") },
{ "chat_noir_2", ("https://youtu.be/X-rJ01EyiAI?si=gH9m_U8oXI35OgWu",
"https://img.youtube.com/vi/X-rJ01EyiAI/maxresdefault.jpg") },
{ "chat_noir_3", ("https://youtu.be/7lIM0wSx7kQ?si=S-RAsLzd4SiCQhE4",
"https://img.youtube.com/vi/7lIM0wSx7kQ/maxresdefault.jpg") },
{ "chat_noir_4", ("https://youtu.be/dbxyKR1P8vA?si=aRzdYBhwvKptV8Ff",
"https://img.youtube.com/vi/dbxyKR1P8vA/maxresdefault.jpg") },
{ "chat_noir_5", ("https://youtu.be/DDHvKo5NnII?si=NFRkdVQL2mELP0yn",
"https://img.youtube.com/vi/DDHvKo5NnII/maxresdefault.jpg") },
{ "chat_noir_6", ("https://youtu.be/J9LgHNf2Qy0?si=YGO1ggiLkefa9901",
"https://img.youtube.com/vi/J9LgHNf2Qy0/maxresdefault.jpg") },
{ "chat_noir_7", ("https://youtu.be/oadhHk2xs6c?si=mbnJCA6SGsoYXnUK",
"https://img.youtube.com/vi/oadhHk2xs6c/maxresdefault.jpg") },
{ "chat_noir_8", ("https://youtu.be/6K1zCgkBaoE?si=quq9vQLJ-AmzjRJJ",
"https://img.youtube.com/vi/6K1zCgkBaoE/maxresdefault.jpg") },
{ "german_rapper_1", ("https://www.youtube.com/watch?v=DWpg71HJt24",
"https://img.youtube.com/vi/DWpg71HJt24/maxresdefault.jpg") },
{ "nizard_1", ("https://youtu.be/1fjA68k8DAU?si=2PuZSquVQGvfmQkZ",
"https://img.youtube.com/vi/1fjA68k8DAU/maxresdefault.jpg") },
{
"juliana_chahayed_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8")
},
{
"mister_v_1", ("https://youtu.be/JeqUw7sGUK8?si=FnmFR2EgkVY6MhqQ",
"https://img.youtube.com/vi/JeqUw7sGUK8/maxresdefault.jpg")
},
{
"compagnie_creole_1", ("https://youtu.be/wfxt1SGWAI8",
"https://img.youtube.com/vi/wfxt1SGWAI8/maxresdefault.jpg")
},
{
"femto_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8")
},
{
"chat_noir_1", ("https://youtu.be/OTi4-q-_Tj0?si=SNnLd-6Y893nL5Au",
"https://img.youtube.com/vi/OTi4-q-_Tj0/maxresdefault.jpg")
},
{
"chat_noir_2", ("https://youtu.be/X-rJ01EyiAI?si=gH9m_U8oXI35OgWu",
"https://img.youtube.com/vi/X-rJ01EyiAI/maxresdefault.jpg")
},
{
"chat_noir_3", ("https://youtu.be/7lIM0wSx7kQ?si=S-RAsLzd4SiCQhE4",
"https://img.youtube.com/vi/7lIM0wSx7kQ/maxresdefault.jpg")
},
{
"chat_noir_4", ("https://youtu.be/dbxyKR1P8vA?si=aRzdYBhwvKptV8Ff",
"https://img.youtube.com/vi/dbxyKR1P8vA/maxresdefault.jpg")
},
{
"chat_noir_5", ("https://youtu.be/DDHvKo5NnII?si=NFRkdVQL2mELP0yn",
"https://img.youtube.com/vi/DDHvKo5NnII/maxresdefault.jpg")
},
{
"chat_noir_6", ("https://youtu.be/J9LgHNf2Qy0?si=YGO1ggiLkefa9901",
"https://img.youtube.com/vi/J9LgHNf2Qy0/maxresdefault.jpg")
},
{
"chat_noir_7", ("https://youtu.be/oadhHk2xs6c?si=mbnJCA6SGsoYXnUK",
"https://img.youtube.com/vi/oadhHk2xs6c/maxresdefault.jpg")
},
{
"chat_noir_8", ("https://youtu.be/6K1zCgkBaoE?si=quq9vQLJ-AmzjRJJ",
"https://img.youtube.com/vi/6K1zCgkBaoE/maxresdefault.jpg")
},
{
"german_rapper_1", ("https://www.youtube.com/watch?v=DWpg71HJt24",
"https://img.youtube.com/vi/DWpg71HJt24/maxresdefault.jpg")
},
{
"nizard_1", ("https://youtu.be/1fjA68k8DAU?si=2PuZSquVQGvfmQkZ",
"https://img.youtube.com/vi/1fjA68k8DAU/maxresdefault.jpg")
},
};
/// <summary>
/// Génère une liste d'artistes de musique en utilisant la bibliothèque Faker pour créer des noms d'artistes et des biographies réalistes.
/// </summary>
/// <param name="count">Nombre d'artistes à générer</param>
/// <returns>Liste d'artistes de musique générés</returns>
/// <param name="count">Nombre d'artistes à générer.</param>
/// <returns>Liste d'artistes de musique générés.</returns>
public List<Artiste> GenerateArtists(int count)
{
var artists = new List<Artiste>();
@@ -73,7 +90,7 @@ public class DataFactory
IdArtiste = i + 1,
Nom = Name.FullName(),
Biographie = Lorem.Paragraph(),
Titres = new List<Titre>()
Titres = new List<Titre>(),
});
}
@@ -83,8 +100,8 @@ public class DataFactory
/// <summary>
/// Génère une liste de styles de musique à partir d'une liste prédéfinie de noms de styles.
/// </summary>
/// <param name="count">Nombre de styles à générer (maximum 15, car il y a 15 styles prédéfinis)</param>
/// <returns>Liste de styles de musique générés</returns>
/// <param name="count">Nombre de styles à générer (maximum 15, car il y a 15 styles prédéfinis).</param>
/// <returns>Liste de styles de musique générés.</returns>
public List<Style> GenerateStyles(int count)
{
var styleNames = new[] { "Rock", "Pop", "Rap", "Électro", "Jazz", "Classique", "Reggae", "Blues", "Metal", "Folk", "Chanson française", "Hip-Hop", "R&B", "Soul", "Punk" };
@@ -106,15 +123,15 @@ public class DataFactory
/// <summary>
/// Génère une liste de titres de musique en utilisant des données de musique réelles pour les URL d'écoute et les jaquettes.
/// </summary>
/// <param name="count">Nombre de titres à générer</param>
/// <param name="artists">Liste des artistes à associer aux titres générés</param>
/// <param name="styles">Liste des styles à associer aux titres générés</param>
/// <returns>Liste de titres de musique générés</returns>
/// <param name="count">Nombre de titres à générer.</param>
/// <param name="artists">Liste des artistes à associer aux titres générés.</param>
/// <param name="styles">Liste des styles à associer aux titres générés.</param>
/// <returns>Liste de titres de musique générés.</returns>
public List<Titre> GenerateTitres(int count, List<Artiste> artists, List<Style> styles)
{
var titres = new List<Titre>();
var random = new Random();
var musicItems = RealMusicData.Values.ToList();
var musicItems = this.RealMusicData.Values.ToList();
for (int i = 0; i < count; i++)
{
@@ -162,9 +179,9 @@ public class DataFactory
/// <summary>
/// Génère une liste de commentaires pour les titres de musique générés, en associant chaque commentaire à un titre aléatoire.
/// </summary>
/// <param name="count">Nombre de commentaires à générer</param>
/// <param name="titres">Liste des titres de musique à associer aux commentaires générés</param>
/// <returns>Liste de commentaires générés</returns>
/// <param name="count">Nombre de commentaires à générer.</param>
/// <param name="titres">Liste des titres de musique à associer aux commentaires générés.</param>
/// <returns>Liste de commentaires générés.</returns>
public List<Commentaire> GenerateCommentaires(int count, List<Titre> titres)
{
var commentaires = new List<Commentaire>();
@@ -181,7 +198,7 @@ public class DataFactory
Auteur = Name.FullName(),
DateCreation = DateTime.Now.AddDays(-random.Next(1, 30)), // Commentaires créés dans les 30 derniers jours
IdTitre = randomTitre.IdTitre,
Titre = randomTitre
Titre = randomTitre,
});
randomTitre.Commentaires.Add(commentaires.Last());

View File

@@ -5,11 +5,11 @@
namespace Webzine.Entity.Fixtures
{
using Bogus;
public class SeedDataLocal
{
public SeedDataLocal()
{
}
/// <summary>
@@ -41,8 +41,7 @@ namespace Webzine.Entity.Fixtures
int count,
List<Artiste> artistes,
List<Style> styles,
List<string> albums
)
List<string> albums)
{
Random random = new Random();
int idStart = 1;

View File

@@ -2,5 +2,4 @@ namespace Webzine.Entity.Fixtures;
public class SeedDataSpotify
{
}

View File

@@ -5,8 +5,8 @@
namespace Webzine.Entity.Fixtures
{
using Webzine.Entity;
public class StyleFactory
{
}
}

View File

@@ -1,17 +1,18 @@
using Bogus;
using Faker;
using System;
using System.Collections.Generic;
using Webzine.Entity;
namespace Webzine.Repository.Fake
namespace Webzine.Repository.Fake
{
using System;
using System.Collections.Generic;
using Bogus;
using Faker;
using Webzine.Entity;
/// <summary>
/// Classe de fabrique pour générer des données factices (fake data) pour les entités Artiste et Titre.
/// </summary>
public static class FakeDataFactory
{
//https://cdn-images.dzcdn.net/images/cover/311bba0fc112d15f72c8b5a65f0456c1/1900x1900-000000-80-0-0.jpg",
// https://cdn-images.dzcdn.net/images/cover/311bba0fc112d15f72c8b5a65f0456c1/1900x1900-000000-80-0-0.jpg",
/// <summary>
/// Génère une liste d'artistes avec des données factices, incluant des titres associés à chaque artiste.
/// </summary>
@@ -28,7 +29,7 @@ namespace Webzine.Repository.Fake
IdArtiste = i,
Nom = Name.FullName(),
Biographie = Lorem.Paragraph(),
Titres = new List<Titre>()
Titres = new List<Titre>(),
});
}
@@ -64,7 +65,7 @@ namespace Webzine.Repository.Fake
NbLectures = RandomNumber.Next(0, 500),
NbLikes = RandomNumber.Next(0, 200),
Album = Lorem.Sentence(2),
Commentaires = new List<Commentaire>()
Commentaires = new List<Commentaire>(),
};
titres.Add(titre);

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
namespace Webzine.Entity
namespace Webzine.Entity
{
using System.ComponentModel.DataAnnotations;
/// <summary>
/// Classe représentant un style de musique.
/// </summary>

View File

@@ -1,7 +1,7 @@
using System.ComponentModel.DataAnnotations;
namespace Webzine.Entity
namespace Webzine.Entity
{
using System.ComponentModel.DataAnnotations;
/// <summary>
/// Classe représentant un titre de musique.
/// Lien avec l'entité <see cref="Artiste"/> : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
@@ -107,4 +107,4 @@ namespace Webzine.Entity
/// </summary>
public List<Style> Styles { get; set; } = new List<Style>();
}
}
}

View File

@@ -1,6 +1,7 @@
namespace Webzine.Repository.Contracts
{
using Webzine.Entity;
/// <summary>
/// Défini une interface <see cref="IArtisteRepository"/> pour gérer les opérations de base de données liées aux artistes.
/// </summary>

View File

@@ -1,7 +1,7 @@
using Webzine.Entity;
namespace Webzine.Repository.Contracts
{
using Webzine.Entity;
public interface ICommentaireRepository
{
void Add(Commentaire commentaire);

View File

@@ -1,7 +1,7 @@
using Webzine.Entity;
namespace Webzine.Repository.Contracts
{
using Webzine.Entity;
/// <summary>
/// Interface définissant les opérations de base pour le repository de styles, permettant d'ajouter, supprimer, trouver et mettre à jour des styles dans la source de données.
/// </summary>

View File

@@ -1,7 +1,7 @@
using Webzine.Entity;
namespace Webzine.Repository.Contracts
namespace Webzine.Repository.Contracts
{
using Webzine.Entity;
/// <summary>
/// Interface qui définit les opérations de base pour la gestion des titres dans une source de données.
/// </summary>

View File

@@ -5,8 +5,10 @@
namespace Webzine.Repository
{
using System.Data.Common;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
using Webzine.EntitiesContext;
using Webzine.Entity;
using Webzine.Repository.Contracts;
@@ -17,7 +19,7 @@ namespace Webzine.Repository
/// </summary>
public class DbArtisteRepository : IArtisteRepository
{
private WebzineDbContext context;
private readonly WebzineDbContext context;
private readonly ILogger<LocalArtisteRepository> logger;
/// <summary>
@@ -115,7 +117,7 @@ namespace Webzine.Repository
/// <inheritdoc/>
public IEnumerable<Artiste> FindAll()
{
try
try
{
// .AsNoTracking() rend la requête beaucoup plus rapide pour de la lecture
var artistes = this.context.Artistes.AsNoTracking().ToList();
@@ -127,15 +129,15 @@ namespace Webzine.Repository
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
}
}
}
/// <inheritdoc/>
public void Update(Artiste artiste)
{
if (artiste == null)
{
throw new ArgumentNullException(nameof(artiste));
}
{
throw new ArgumentNullException(nameof(artiste));
}
try
{

View File

@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore;
using Webzine.EntitiesContext;
using Microsoft.Extensions.Logging;
using Webzine.EntitiesContext;
using Webzine.Entity;
using Webzine.Repository.Contracts;
@@ -15,6 +15,7 @@ public class DbCommentaireRepository : ICommentaireRepository
private readonly WebzineDbContext context;
/// <summary>
/// Initializes a new instance of the <see cref="DbCommentaireRepository"/> class.
/// Initialisation de <see cref="DbCommentaireRepository"/>.
/// </summary>
/// <param name="logger">Le service de journalisation injecté pour suivre les opérations du repository.</param>

View File

@@ -1,6 +1,6 @@
using Microsoft.EntityFrameworkCore;
using Webzine.EntitiesContext;
using Microsoft.Extensions.Logging;
using Webzine.EntitiesContext;
using Webzine.Entity;
using Webzine.Repository.Contracts;

View File

@@ -1,7 +1,7 @@
using Webzine.Entity;
namespace Webzine.Repository
namespace Webzine.Repository
{
using Webzine.Entity;
/// <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
@@ -12,21 +12,21 @@ namespace Webzine.Repository
/// <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

@@ -5,6 +5,7 @@
namespace Webzine.Repository
{
using Microsoft.Extensions.Logging;
using Webzine.Entity;
using Webzine.Repository.Contracts;
@@ -15,9 +16,9 @@ namespace Webzine.Repository
public class LocalArtisteRepository : IArtisteRepository
{
private readonly ILogger<LocalArtisteRepository> logger;
//private readonly List<Artiste> artistes;
private readonly InMemoryDataStore dataStore;
// private readonly List<Artiste> artistes;
private readonly InMemoryDataStore dataStore;
/// <summary>
/// Initializes a new instance of the <see cref="LocalArtisteRepository"/> class.
@@ -28,7 +29,8 @@ namespace Webzine.Repository
public LocalArtisteRepository(InMemoryDataStore dataStore, ILogger<LocalArtisteRepository> logger)
{
this.logger = logger;
//this.artistes = artistes;
// this.artistes = artistes;
this.dataStore = dataStore;
}

View File

@@ -7,9 +7,11 @@ namespace Webzine.Repository
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.Logging;
using Webzine.Entity;
using Webzine.Repository.Contracts;
using Webzine.Entity;
using Webzine.Repository.Contracts;
/// <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.
@@ -21,6 +23,7 @@ using Webzine.Repository.Contracts;
private readonly InMemoryDataStore dataStore;
/// <summary>
/// Initializes a new instance of the <see cref="LocalCommentaireRepository"/> class.
/// 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.
/// </summary>
@@ -55,7 +58,7 @@ using Webzine.Repository.Contracts;
{
var commentaire = this.dataStore.Commentaires.FirstOrDefault(c => c.IdCommentaire == idCommentaire);
if (commentaire == null)
{
{
return new Commentaire();
}

View File

@@ -10,7 +10,8 @@ namespace Webzine.Repository;
public class LocalStyleRepository : IStyleRepository
{
private readonly ILogger<LocalStyleRepository> logger;
//private readonly List<Style> styles;
// private readonly List<Style> styles;
private readonly InMemoryDataStore dataStore;
/// <summary>

View File

@@ -16,6 +16,7 @@ public class ArtisteController : Controller
private readonly IArtisteRepository artisteRepository;
/// <summary>
/// Initializes a new instance of the <see cref="ArtisteController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="ArtisteController"/>.
/// </summary>
/// <param name="logger">Logger.</param>

View File

@@ -1,10 +1,10 @@
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
namespace Webzine.WebApplication.Areas.Administration.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire;
[Area("Administration")]
public class CommentaireController : Controller
{
@@ -12,6 +12,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
private readonly ICommentaireRepository commentaireRepository;
/// <summary>
/// Initializes a new instance of the <see cref="CommentaireController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="CommentaireController"/>.
/// Utilise l'injection de dépendances pour récupérer le repository.
/// </summary>
@@ -37,10 +38,10 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
// Initialisation du ViewModel
var viewModel = new CommentaireViewModel
{
Commentaires = commentaires
Commentaires = commentaires,
};
return View(viewModel);
return this.View(viewModel);
}
/// <summary>
@@ -58,10 +59,10 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
Auteur = commentaire.Auteur,
Contenu = commentaire.Contenu,
DateCreation = commentaire.DateCreation,
TitreLibelle = commentaire.Titre?.Libelle
TitreLibelle = commentaire.Titre?.Libelle,
};
return View(model);
return this.View(model);
}
/// <summary>
@@ -79,7 +80,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
this.commentaireRepository.Delete(commentaire);
}
return RedirectToAction("Index");
return this.RedirectToAction("Index");
}
}
}

View File

@@ -16,6 +16,7 @@ public class DashboardController : Controller
private readonly ITitreRepository titreRepository;
/// <summary>
/// Initializes a new instance of the <see cref="DashboardController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="DashboardController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté.</param>

View File

@@ -1,9 +1,9 @@
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
namespace Webzine.WebApplication.Areas.Administration.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.Areas.Administration.ViewModels.Style;
/// <summary>
/// Contrôleur pour la gestion des styles dans l'administration du webzine.
/// </summary>
@@ -14,6 +14,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
private readonly IStyleRepository styleRepository;
/// <summary>
/// Initializes a new instance of the <see cref="StyleController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="StyleController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté.</param>
@@ -93,7 +94,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
[HttpGet]
public IActionResult Edit(int id)
{
var style = styleRepository.Find(id);
var style = this.styleRepository.Find(id);
var model = new StyleEditViewModel
{

View File

@@ -18,8 +18,8 @@ public class TitreController : Controller
private readonly IArtisteRepository artisteRepository;
private readonly IStyleRepository styleRepository;
/// <summary>
/// Initializes a new instance of the <see cref="TitreController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté.</param>

View File

@@ -9,10 +9,12 @@
/// Définit l'identifiant de l'artiste.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Définit le nom de l'artiste.
/// </summary>
public string Nom { get; set; }
/// <summary>
/// Définit la biographie de l'artiste.
/// </summary>

View File

@@ -1,5 +1,5 @@
// <copyright file="CommentaireViewModel.cs" company="Webzine">
// Copyright (c) Webzine. All rights reserved.
// <copyright file="CommentaireViewModel.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Commentaire

View File

@@ -8,7 +8,7 @@ public class DashboardViewModel
/// <summary>
/// Définit le nombre total d'artistes chroniqués dans le webzine.
/// </summary>
public int NombreArtistes { get; set; }
public int NombreArtistes { get; set; }
/// <summary>
/// Définit le nom de l'artiste le plus chroniqué dans le webzine.
@@ -29,6 +29,7 @@ public class DashboardViewModel
/// Définit l'identifiant de la biographie d'artiste la plus lue dans le webzine.
/// </summary>
public int IdMusiqueLaPlusJouee { get; set; }
/// <summary>
/// Définit le nom de la biographie d'artiste la plus lue dans le webzine.
/// </summary>

View File

@@ -1,20 +1,17 @@
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
// Copyright (c) Webzine. Tout droit réservé.
// <copyright file="StyleCreateViewModel.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
{
/// <summary>
/// ViewModel pour la création d'un style en administration.
/// </summary>
public class StyleCreateViewModel
{
/// <summary>
/// Obtient ou définit le libellé du style.
/// </summary>
public string Libelle { get; set; }
}
}

View File

@@ -1,26 +1,22 @@
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
// Copyright (c) Webzine. Tout droit réservé.
// <copyright file="StyleDeleteViewModel.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
{
/// <summary>
/// ViewModel pour la suppression d'un style en administration.
/// </summary>
public class StyleDeleteViewModel
{
/// <summary>
/// Obtient ou définit l'identifiant du style à supprimer.
/// </summary>
public int IdStyle { get; set; }
/// <summary>
/// Obtient ou définit le libellé du style.
/// </summary>
public string Libelle { get; set; }
}
}

View File

@@ -1,27 +1,22 @@
// <copyright file="StyleDeleteViewModel.cs" company="Webzine">
// Copyright (c) Webzine. Tout droit réservé.
// <copyright file="StyleEditViewModel.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Style
{
/// <summary>
/// ViewModel pour la modification d'un style en administration.
/// </summary>
public class StyleEditViewModel
{
/// <summary>
/// Obtient ou définit le libellé du style.
/// </summary>
public int IdStyle { get; set; }
/// <summary>
/// Obtient ou définit le libellé du style.
/// </summary>
public string Libelle { get; set; }
}
}

View File

@@ -65,7 +65,7 @@ public class AdminTitreForm
/// <summary>
/// Définit la liste des identifiants des styles associés au titre.
/// </summary>
public List<int> Styles { get; set; } = new();
public List<int> Styles { get; set; } = new ();
/// <summary>
/// Définit la liste des artistes disponibles pour la sélection dans le formulaire de création ou de modification d'un titre.

View File

@@ -1,10 +1,11 @@
// <copyright file="AccueilController.cs" company=" Equipe 1 - ">
// Copyright (c) Equipe 1 - . All rights reserved.
// <copyright file="AccueilController.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Accueil;
@@ -19,6 +20,7 @@ namespace Webzine.WebApplication.Controllers
private readonly ITitreRepository titreRepository;
/// <summary>
/// Initializes a new instance of the <see cref="AccueilController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="AccueilController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>

View File

@@ -7,6 +7,7 @@ public class ApiController : ControllerBase
private readonly ILogger<ApiController> logger;
/// <summary>
/// Initializes a new instance of the <see cref="ApiController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="ApiController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
@@ -25,10 +26,10 @@ public class ApiController : ControllerBase
{
this.logger.LogInformation("Get Version was called");
return Ok(new
{
nom = "webzine",
version = "2.0",
});
return this.Ok(new
{
nom = "webzine",
version = "2.0",
});
}
}

View File

@@ -1,6 +1,7 @@
namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity.Fixtures;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Artiste;
@@ -9,18 +10,20 @@
{
// Injection du logger via le constructeur
private readonly ILogger<ArtisteController> logger;
private readonly IArtisteRepository _artisteRepository;
private readonly IArtisteRepository artisteRepository;
/// <summary>
/// Initializes a new instance of the <see cref="ArtisteController"/> class.
/// Initialise une nouvelle instance du <see cref="ArtisteController"/>. avec un service de journalisation injecté.
/// </summary>
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
public ArtisteController(ILogger<ArtisteController> logger,
public ArtisteController(
ILogger<ArtisteController> logger,
IArtisteRepository artisteRepository)
{
this.logger = logger;
this.logger.LogDebug("Initialisation du ArtisteController");
this._artisteRepository = artisteRepository;
this.artisteRepository = artisteRepository;
}
/// <summary>
@@ -44,7 +47,7 @@
.ToTitleCase(nom.Replace("-", " "));
// On appelle la factory pour obtenir l'artiste unique
var artiste = this._artisteRepository.FindByName(nomPropre);
var artiste = this.artisteRepository.FindByName(nomPropre);
// Check if artiste was found
if (artiste == null)

View File

@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Mvc;
namespace Webzine.WebApplication.Controllers
namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
/// <summary>
/// Controller pour la page contact.
/// </summary>
@@ -11,6 +11,7 @@ namespace Webzine.WebApplication.Controllers
private readonly ILogger<ContactController> logger;
/// <summary>
/// Initializes a new instance of the <see cref="ContactController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="ContactController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>

View File

@@ -1,10 +1,11 @@
// <copyright file="RechercheController.cs" company=" Equipe 1 - ">
// Copyright (c) Equipe 1 - . All rights reserved.
// <copyright file="RechercheController.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Recherche;
using Webzine.WebApplication.ViewModels.Titre;

View File

@@ -1,10 +1,11 @@
// <copyright file="TitreController.cs" company=" Equipe 1 - ">
// Copyright (c) Equipe 1 - . All rights reserved.
// <copyright file="TitreController.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace Webzine.WebApplication.Controllers
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Entity;
using Webzine.Repository.Contracts;
using Webzine.WebApplication.ViewModels.Titre;
@@ -21,6 +22,7 @@ namespace Webzine.WebApplication.Controllers
private readonly ITitreRepository titreRepository;
/// <summary>
/// Initializes a new instance of the <see cref="TitreController"/> class.
/// Initialise une nouvelle instance de la classe <see cref="TitreController"/>.
/// </summary>
/// <param name="logger">Service de journalisation injecte.</param>

View File

@@ -18,6 +18,7 @@ try
// Ajoute les services necessaires pour permettre l'utilisation des
// controllers avec des vues.
builder.Services.AddControllersWithViews()
// Ajoute la compilation des vues lors de l'execution de l'application.
// Cela nous evite de recompiler l'application a chaque modification de vue.
// Necessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
@@ -42,6 +43,7 @@ try
builder.Services.AddDbContext<WebzineDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("PostGreSQLConnection")));
}
builder.Services.AddScoped<DbEntityRepository>();
builder.Services.AddScoped<ITitreRepository, DbTitreRepository>();
builder.Services.AddScoped<IStyleRepository, DbStyleRepository>();

View File

@@ -1,8 +1,8 @@
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
namespace Webzine.WebApplication.ViewComponents
{
using Microsoft.AspNetCore.Mvc;
using Webzine.Repository.Contracts;
/// <summary>
/// View component pour la sidebar, récupère les styles depuis le repository.
/// </summary>

View File

@@ -1,6 +1,7 @@
namespace Webzine.WebApplication.ViewModels.Artiste
{
using Webzine.Entity;
/// <summary>
/// ViewModel pour afficher les informations d'un artiste et ses titres groupés par album.
/// </summary>

View File

@@ -15,10 +15,10 @@ public class RechercheIndexViewModel
/// <summary>
/// Artistes trouves.
/// </summary>
public List<RechercheArtisteItem> Artistes { get; set; } = new();
public List<RechercheArtisteItem> Artistes { get; set; } = new ();
/// <summary>
/// Titres trouves.
/// </summary>
public List<TitreStyleItem> Titres { get; set; } = new();
public List<TitreStyleItem> Titres { get; set; } = new ();
}

View File

@@ -50,10 +50,10 @@ public class TitreContent
/// <summary>
/// Définit le nom de l'album associé au titre.
/// </summary>
public List<Style> Styles { get; set; } = new();
public List<Style> Styles { get; set; } = new ();
/// <summary>
/// Définit la liste des commentaires associés au titre.
/// </summary>
public List<Commentaire> Commentaires { get; set; } = new();
public List<Commentaire> Commentaires { get; set; } = new ();
}

View File

@@ -13,5 +13,5 @@ public class TitreStyle
/// <summary>
/// Définit la liste des items de titre associés au style musical.
/// </summary>
public List<TitreStyleItem> Titres { get; set; } = new();
public List<TitreStyleItem> Titres { get; set; } = new ();
}