diff --git a/.gitignore b/.gitignore
index a1d490a..5f2ade4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,6 @@ obj/
riderModule.iml
/_ReSharper.Caches/
[Ll]ogs/
-.idea/
\ No newline at end of file
+.idea/
+/vs/
+/.vs/
diff --git a/Webzine.Documentation/Rapport/equip 1 - rapport.md b/Webzine.Documentation/Rapport/equip 1 - rapport.md
deleted file mode 100644
index e69de29..0000000
diff --git a/Webzine.Documentation/Rapport/equipe 1 - rapport.md b/Webzine.Documentation/Rapport/equipe 1 - rapport.md
new file mode 100644
index 0000000..76f195f
--- /dev/null
+++ b/Webzine.Documentation/Rapport/equipe 1 - rapport.md
@@ -0,0 +1,21 @@
+**Loïc Masi** :
+
+04/03 :
+- Création de 'AccueilController'
+ - Création de la fonction Index() -> afficher l'accueil du webzine
+- Ajout de la vue 'Views/Accueil/Index.cshtml'
+- Mise en place d'un Header dans 'Views/Shared/_Header.cshtml'
+- Mise en place de la Sidebar dans 'Views/Shared/_Sidebar.cshtml'
+
+05/03 :
+- Mise en place de fausse données dans 'Webzine.Repository' à l'aide de Faker
+- Ajout du ViewModel pour afficher les informations nécessaire sur la page d'accueil
+- Adaptation de quelques éléments sur la page (Bootstrap)
+- Mise en place du parametrage du nombre d'elements a afficher sur la page dans appsettings
+- Modifiaction du header pour ajouter le Dropdown (Administration) et ajout de quelques redirections
+
+06/03 :
+- Récupération des modifications depuis 'dev'
+- Ajout des redirections vers les pages 'Administration'
+- Adaptation du layout principal pour adaptation entre public et administration
+- Ajout du Footer (sur toutes les pages)
\ No newline at end of file
diff --git a/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj b/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj
index 2e335bf..d7e20a3 100644
--- a/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj
+++ b/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj
@@ -8,7 +8,7 @@
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -16,7 +16,7 @@
-
+
@@ -25,4 +25,8 @@
+
+
+
+
diff --git a/Webzine.Entity/Artiste.cs b/Webzine.Entity/Artiste.cs
new file mode 100644
index 0000000..8f1df08
--- /dev/null
+++ b/Webzine.Entity/Artiste.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+using System.Timers;
+
+namespace Webzine.Entity
+{
+ ///
+ /// Classe représentant un artiste.
+ /// Lien avec l'entité : un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
+ ///
+ public class Artiste
+ {
+ ///
+ /// Identifiant unique de l'artiste.
+ ///
+ public int IdArtiste { get; set; }
+
+ ///
+ /// Nom de l'artiste. Doit être compris entre 2 et 50 caractères et est obligatoire.
+ ///
+ [Required]
+ [MinLength(2)]
+ [MaxLength(50)]
+ [Display(Name = "Nom de l'artiste")]
+ public string Nom { get; set; }
+
+ ///
+ /// Biographie de l'artiste, qui peut contenir une description de sa carrière, de son style musical, etc. Doit être compris entre 10 et 4000 caractères et est obligatoire.
+ ///
+ public string Biographie { get; set; }
+
+ ///
+ /// Liste des titres associés à cet artiste. Un artiste peut avoir plusieurs titres, mais un titre n'a qu'un seul artiste.
+ ///
+ public List Titres { get; set; }
+ }
+}
diff --git a/Webzine.Entity/Commentaire.cs b/Webzine.Entity/Commentaire.cs
new file mode 100644
index 0000000..baaa852
--- /dev/null
+++ b/Webzine.Entity/Commentaire.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Text;
+
+namespace Webzine.Entity
+{
+ ///
+ /// Classe représentant un commentaire laissé par un utilisateur sur un titre.
+ /// Lien avec l'entité : un titre peut avoir plusieurs commentaires, mais un commentaire n'a qu'un seul titre.
+ ///
+ public class Commentaire
+ {
+ ///
+ /// Identifiant unique du commentaire.
+ ///
+ public int IdCommentaire { get; set; }
+
+ ///
+ /// Contenu du commentaire laissé par l'utilisateur. Doit être compris entre 10 et 1000 caractères et est obligatoire.
+ ///
+ [Required]
+ [MinLength(10)]
+ [MaxLength(1000)]
+ [Display(Name = "Commentaire")]
+ public string Contenu { get; set; }
+
+ ///
+ /// Nom de l'auteur du commentaire. Doit être compris entre 2 et 30 caractères et est obligatoire.
+ ///
+ [Required]
+ [MinLength(2)]
+ [MaxLength(30)]
+ [Display(Name = "Nom")]
+ public string Auteur { get; set; }
+
+ ///
+ /// Date de création du commentaire. Représente la date à laquelle le commentaire a été laissé par l'utilisateur. Doit être une date valide et est obligatoire.
+ ///
+ [Required]
+ [Display(Name = "Date de création")]
+ public DateTime DateCreation { get; set; }
+
+ ///
+ /// Identifiant du titre associé à ce commentaire. Clé étrangère vers l'entité .
+ ///
+ public int IdTitre { get; set; }
+
+ ///
+ /// Référence au titre associé à ce commentaire. Permet d'accéder aux informations du titre à partir du commentaire.
+ ///
+ public Titre Titre { get; set; }
+ }
+}
diff --git a/Webzine.Entity/Fixtures/ArtisteFactory.cs b/Webzine.Entity/Fixtures/ArtisteFactory.cs
new file mode 100644
index 0000000..d8ecb26
--- /dev/null
+++ b/Webzine.Entity/Fixtures/ArtisteFactory.cs
@@ -0,0 +1,53 @@
+using Bogus;
+
+namespace Webzine.Entity.Fixtures
+{
+ ///
+ /// Factory pour générer des artistes avec des titres associés, à l'aide de la bibliothèque Bogus.
+ ///
+ public class ArtisteFactory
+ {
+ ///
+ /// Récupère un artiste par son nom, en générant des données fictives pour ses titres associés.
+ ///
+ /// Le nom de l'artiste à générer.
+ /// Un objet Artiste avec des titres associés générés de manière aléatoire.
+ public static Artiste SeedArtisteByName(string nom)
+ {
+ // On définit nos albums "bouchonnés"
+ 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" }
+ };
+
+ var faker = new Bogus.Faker("fr");
+ var tousLesTitres = new List();
+
+ // Pour chaque album, on génère un paquet de titres
+ foreach (var album in albumsData)
+ {
+ var nombreDeTitres = faker.Random.Number(3, 6);
+
+ var titresDeLalbum = new Faker("fr")
+ .RuleFor(t => t.IdTitre, f => f.IndexFaker + 1 + tousLesTitres.Count)
+ .RuleFor(t => t.UrlJaquette, _ => album.Image)
+ .RuleFor(t => t.Album, _ => album.Nom)
+ .RuleFor(t => t.Duree, f => f.Random.Number(90, 180))
+ .RuleFor(t => t.Libelle, f => f.Music.Genre() + " - " + f.Commerce.ProductName())
+ .Generate(nombreDeTitres);
+
+ tousLesTitres.AddRange(titresDeLalbum);
+ }
+
+ // On crée l'artiste final
+ var artisteFaker = new Faker("fr")
+ .RuleFor(a => a.IdArtiste, f => f.IndexFaker + 1)
+ .RuleFor(a => a.Nom, _ => nom)
+ .RuleFor(a => a.Biographie, f => f.Lorem.Paragraphs(2))
+ .RuleFor(a => a.Titres, _ => tousLesTitres);
+
+ return artisteFaker.Generate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Webzine.Entity/Fixtures/DataFactory.cs b/Webzine.Entity/Fixtures/DataFactory.cs
new file mode 100644
index 0000000..8b6617d
--- /dev/null
+++ b/Webzine.Entity/Fixtures/DataFactory.cs
@@ -0,0 +1,192 @@
+namespace Webzine.Entity.Fixtures;
+
+using Entity;
+using Faker;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+public class DataFactory
+{
+ ///
+ /// Dictionnaire contenant des données de musique réelles pour les titres générés.
+ ///
+ public Dictionary RealMusicData { get; set; }
+ = new Dictionary
+ {
+ { "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") },
+ };
+
+ ///
+ /// 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.
+ ///
+ /// Nombre d'artistes à générer
+ /// Liste d'artistes de musique générés
+ public List GenerateArtists(int count)
+ {
+ var artists = new List();
+
+ for (int i = 0; i < count; i++)
+ {
+ artists.Add(new Artiste
+ {
+ IdArtiste = i + 1,
+ Nom = Name.FullName(),
+ Biographie = Lorem.Paragraph(),
+ Titres = new List()
+ });
+ }
+
+ return artists;
+ }
+
+ ///
+ /// Génère une liste de styles de musique à partir d'une liste prédéfinie de noms de styles.
+ ///
+ /// Nombre de styles à générer (maximum 15, car il y a 15 styles prédéfinis)
+ /// Liste de styles de musique générés
+ public List