commit 86a87f75cebc3eef231dcbbaa4dd3ecbf6e1e3f5 Author: mirage <119869686+ClementBobin@users.noreply.github.com> Date: Tue Mar 3 16:22:37 2026 +0100 Add initial project structure and implement basic functionality - Created MSTestSettings.cs to enable parallel test execution. - Added StyleTests.cs and TitreTests.cs for unit testing of Style and Titre entities. - Implemented Webzine.Entity.Tests project with necessary configurations. - Created SeedDataLocal.cs and SeedDataSpotify.cs for local and Spotify data seeding. - Established repository contracts for Artiste, Commentaire, Style, and Titre. - Developed DbEntityRepository and LocalEntityRepository classes. - Set up Webzine.WebApplication with controllers, logging, and Docker support. - Configured NLog for logging and added necessary appsettings for development. - Created initial views and layout for the web application. - Added Dockerfile and docker-compose configuration for containerization. diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cd967fc --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/.idea +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a1d490a --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ +[Ll]ogs/ +.idea/ \ No newline at end of file diff --git a/Webzine.Business.Contracts/Webzine.Business.Contracts.csproj b/Webzine.Business.Contracts/Webzine.Business.Contracts.csproj new file mode 100644 index 0000000..33c0658 --- /dev/null +++ b/Webzine.Business.Contracts/Webzine.Business.Contracts.csproj @@ -0,0 +1,24 @@ + + + + net10.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + stylecop.json + + + + diff --git a/Webzine.Business/Webzine.Business.csproj b/Webzine.Business/Webzine.Business.csproj new file mode 100644 index 0000000..33c0658 --- /dev/null +++ b/Webzine.Business/Webzine.Business.csproj @@ -0,0 +1,24 @@ + + + + net10.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + stylecop.json + + + + diff --git a/Webzine.Documentation/Installation/equipe 1 - dossier de configuration.md b/Webzine.Documentation/Installation/equipe 1 - dossier de configuration.md new file mode 100644 index 0000000..e69de29 diff --git a/Webzine.Documentation/Rapport/equip 1 - rapport.md b/Webzine.Documentation/Rapport/equip 1 - rapport.md new file mode 100644 index 0000000..e69de29 diff --git a/Webzine.Documentation/StyleCop/stylecop.json b/Webzine.Documentation/StyleCop/stylecop.json new file mode 100644 index 0000000..81a3ce9 --- /dev/null +++ b/Webzine.Documentation/StyleCop/stylecop.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json", + "settings": { + "documentationRules": { + "companyName": " Equipe 1 - ", + "documentationCulture": "fr-FR" + } + } +} diff --git a/Webzine.Documentation/Webzine.Documentation.csproj b/Webzine.Documentation/Webzine.Documentation.csproj new file mode 100644 index 0000000..37d4531 --- /dev/null +++ b/Webzine.Documentation/Webzine.Documentation.csproj @@ -0,0 +1,13 @@ + + + + net10.0 + enable + enable + + + + + + + diff --git a/Webzine.EntitiesContext/Webzine.EntitiesContext.csproj b/Webzine.EntitiesContext/Webzine.EntitiesContext.csproj new file mode 100644 index 0000000..33c0658 --- /dev/null +++ b/Webzine.EntitiesContext/Webzine.EntitiesContext.csproj @@ -0,0 +1,24 @@ + + + + net10.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + stylecop.json + + + + diff --git a/Webzine.Entity.Tests/ArtisteTests.cs b/Webzine.Entity.Tests/ArtisteTests.cs new file mode 100644 index 0000000..531248c --- /dev/null +++ b/Webzine.Entity.Tests/ArtisteTests.cs @@ -0,0 +1,55 @@ +namespace Webzine.Entity.Tests +{ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + /// + /// Tests de l'entité . + /// Vérifie que les contraintes imposées (nom du champ, longueur max du champ, + /// champ obligatoire, libellé du champ, clé primaire...) sont bien respectées. + /// + [TestClass] + public class ArtisteTests + { + [TestMethod] + public void ArtisteHasIdArtiste() + { + Common.HasProperty(typeof(Artiste), nameof(Artiste.IdArtiste)); + } + + [TestMethod] + public void ArtisteHasNom() + { + Common.HasProperty(typeof(Artiste), nameof(Artiste.Nom)); + } + + [TestMethod] + public void ArtisteHasNomTailleMin1() + { + Common.AttributLongueurMin(typeof(Artiste), nameof(Artiste.Nom), 2); + } + + [TestMethod] + public void ArtisteHasNomTailleMax50() + { + Common.AttributLongueurMax(typeof(Artiste), nameof(Artiste.Nom), 50); + } + + [TestMethod] + public void ArtisteHasNomDisplayValid() + { + Common.AttributDisplay(typeof(Artiste), nameof(Artiste.Nom), "Nom de l'artiste"); + } + + [TestMethod] + public void ArtisteHasBiographie() + { + Common.HasProperty(typeof(Artiste), nameof(Artiste.Biographie)); + } + + [TestMethod] + public void ArtisteHasTitres() + { + Common.HasProperty(typeof(Artiste), nameof(Artiste.Titres)); + } + } +} \ No newline at end of file diff --git a/Webzine.Entity.Tests/CommentaireTests.cs b/Webzine.Entity.Tests/CommentaireTests.cs new file mode 100644 index 0000000..a5f1ad7 --- /dev/null +++ b/Webzine.Entity.Tests/CommentaireTests.cs @@ -0,0 +1,109 @@ +namespace Webzine.Entity.Tests +{ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + /// + /// Tests de l'entité . + /// Vérifie que les contraintes imposées (nom du champ, longueur max du champ, + /// champ obligatoire, libellé du champ, clé primaire...) sont bien respectées. + /// + [TestClass] + public class CommentaireTests + { + [TestMethod] + public void CommentaireHasIdCommentaire() + { + Common.HasProperty(typeof(Commentaire), nameof(Commentaire.IdCommentaire)); + } + + [TestMethod] + public void CommentaireHasContenu() + { + Common.HasProperty(typeof(Commentaire), nameof(Commentaire.Contenu)); + } + + [TestMethod] + public void CommentaireHasContenuDisplayValid() + { + Common.AttributDisplay(typeof(Commentaire), nameof(Commentaire.Contenu), "Commentaire"); + } + + [TestMethod] + public void CommentaireHasContenuRequis() + { + Common.AttributRequis(typeof(Commentaire), nameof(Commentaire.Contenu)); + } + + [TestMethod] + public void CommentaireHasContenuTailleMin10() + { + Common.AttributLongueurMin(typeof(Commentaire), nameof(Commentaire.Contenu), 10); + } + + [TestMethod] + public void CommentaireHasContenuTailleMax1000() + { + Common.AttributLongueurMax(typeof(Commentaire), nameof(Commentaire.Contenu), 1000); + } + + [TestMethod] + public void CommentaireHasAuteur() + { + Common.HasProperty(typeof(Commentaire), nameof(Commentaire.Auteur)); + } + + [TestMethod] + public void CommentaireHasAuteurDisplayValid() + { + Common.AttributDisplay(typeof(Commentaire), nameof(Commentaire.Auteur), "Nom"); + } + + [TestMethod] + public void CommentaireHasAuteurRequis() + { + Common.AttributRequis(typeof(Commentaire), nameof(Commentaire.Auteur)); + } + + [TestMethod] + public void CommentaireHasAuteurTailleMin2() + { + Common.AttributLongueurMin(typeof(Commentaire), nameof(Commentaire.Auteur), 2); + } + + [TestMethod] + public void CommentaireHasAuteurTailleMax30() + { + Common.AttributLongueurMax(typeof(Commentaire), nameof(Commentaire.Auteur), 30); + } + + [TestMethod] + public void CommentaireHasDateCreation() + { + Common.HasProperty(typeof(Commentaire), nameof(Commentaire.DateCreation)); + } + + [TestMethod] + public void CommentaireHasDateCreationRequis() + { + Common.AttributRequis(typeof(Commentaire), nameof(Commentaire.DateCreation)); + } + + [TestMethod] + public void CommentaireHasDateCreationDisplayValid() + { + Common.AttributDisplay(typeof(Commentaire), nameof(Commentaire.DateCreation), "Date de création"); + } + + [TestMethod] + public void CommentaireHasIdTitre() + { + Common.HasProperty(typeof(Commentaire), nameof(Commentaire.IdTitre)); + } + + [TestMethod] + public void CommentaireHasTitre() + { + Common.HasProperty(typeof(Commentaire), nameof(Commentaire.Titre)); + } + } +} diff --git a/Webzine.Entity.Tests/Common.cs b/Webzine.Entity.Tests/Common.cs new file mode 100644 index 0000000..531ab5d --- /dev/null +++ b/Webzine.Entity.Tests/Common.cs @@ -0,0 +1,90 @@ +namespace Webzine.Entity.Tests +{ + using System; + using System.ComponentModel.DataAnnotations; + using System.Linq; + using Microsoft.VisualStudio.TestTools.UnitTesting; + + /// + /// Méthodes utilitaires permettant de tester les entités. + /// + public static class Common + { + /// + /// Vérifie que l'entité possède bien la propriété passée en paramètre. + /// + /// type de l'entité + /// nom de la propriété de l'entité + public static void HasProperty(Type typeObjet, string nomPropriete) + { + var property = typeObjet.GetProperty(nomPropriete); + Assert.IsNotNull(property, "La classe " + typeObjet.Name + " doit avoir une propriété '" + nomPropriete + "'."); + } + + /// + /// Vérifie que l'attribut de l'entité a l'annotation [Display(Name = "xxx")] avec la valeur attendue. + /// + /// type de l'entité + /// nom de la propriété de l'entité + /// valeur attendue pour l'affichage de cette propriété + public static void AttributDisplay(Type typeObjet, string nomPropriete, string chaineAttendue) + { + var property = typeObjet.GetProperty(nomPropriete); + var annotation = (DisplayAttribute)property.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault(); + Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'a pas de libellé approprié. Il manque l'annotation Display."); + Assert.AreEqual(chaineAttendue, annotation.Name); + } + + /// + /// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue. + /// + /// type de l'entité + /// nom de la propriété de l'entité + /// longueur maximum + public static void AttributLongueurMax(Type typeObjet, string nomPropriete, int max) + { + var property = typeObjet.GetProperty(nomPropriete); + var annotation = (MaxLengthAttribute)property.GetCustomAttributes(typeof(MaxLengthAttribute), false).FirstOrDefault(); + Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'a pas de longueur maximum. Il manque l'annotation MaxLength."); + Assert.AreEqual(max, annotation.Length, "La propriété '" + nomPropriete + "' ne doit pas pouvoir dépasser " + max + " caractères."); + } + + /// + /// Vérifie que l'attribut de l'entité a l'annotation [MinLength(xx)] avec la longueur attendue. + /// + /// type de l'entité + /// nom de la propriété de l'entité + /// longueur minimum + public static void AttributLongueurMin(Type typeObjet, string nomPropriete, int min) + { + var property = typeObjet.GetProperty(nomPropriete); + var annotation = (MinLengthAttribute)property.GetCustomAttributes(typeof(MinLengthAttribute), false).FirstOrDefault(); + Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'a pas de longueur minimum. Il manque l'annotation MinLength."); + Assert.AreEqual(min, annotation.Length, "La propriété '" + nomPropriete + "' ne avoir au moins " + min + " caractères."); + } + + /// + /// Vérifie que l'attribut de l'entité a l'annotation [Required]. + /// + /// type de l'entité + /// nom de la propriété de l'entité + public static void AttributRequis(Type typeObjet, string nomPropriete) + { + var property = typeObjet.GetProperty(nomPropriete); + var annotation = (RequiredAttribute)property.GetCustomAttributes(typeof(RequiredAttribute), false).FirstOrDefault(); + Assert.IsNotNull(annotation, "La propriété '" + nomPropriete + "' n'est pas obligatoire. Il manque l'annotation Required."); + } + + /// + /// Vérifie que l'attribut de l'entité n'a pas l'annotation [Url]. + /// + /// type de l'entité + /// nom de la propriété de l'entité + public static void AttributHasNotUrlValidation(Type typeObjet, string nomPropriete) + { + var property = typeObjet.GetProperty(nomPropriete); + var annotation = (UrlAttribute)property.GetCustomAttributes(typeof(UrlAttribute), false).FirstOrDefault(); + Assert.IsNull(annotation, "La propriété '" + nomPropriete + "' ne doit pas être une URL obligatoirement. Retirez l'annotation Url."); + } + } +} diff --git a/Webzine.Entity.Tests/MSTestSettings.cs b/Webzine.Entity.Tests/MSTestSettings.cs new file mode 100644 index 0000000..8b7de71 --- /dev/null +++ b/Webzine.Entity.Tests/MSTestSettings.cs @@ -0,0 +1 @@ +[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] \ No newline at end of file diff --git a/Webzine.Entity.Tests/StyleTests.cs b/Webzine.Entity.Tests/StyleTests.cs new file mode 100644 index 0000000..ac26180 --- /dev/null +++ b/Webzine.Entity.Tests/StyleTests.cs @@ -0,0 +1,49 @@ +namespace Webzine.Entity.Tests +{ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + /// + /// Tests de l'entité . + /// Vérifie que les contraintes imposées (nom du champ, longueur max du champ, + /// champ obligatoire, libellé du champ, clé primaire...) sont bien respectées. + /// + [TestClass] + public class StyleTests + { + [TestMethod] + public void StyleHasIdStyle() + { + Common.HasProperty(typeof(Style), nameof(Style.IdStyle)); + } + + [TestMethod] + public void StyleHasLibelle() + { + Common.HasProperty(typeof(Style), nameof(Style.Libelle)); + } + + [TestMethod] + public void StyleHasLibelleDisplayValid() + { + Common.AttributDisplay(typeof(Style), nameof(Style.Libelle), "Libellé"); + } + + [TestMethod] + public void StyleHasLibelleRequis() + { + Common.AttributRequis(typeof(Style), nameof(Style.Libelle)); + } + + [TestMethod] + public void StyleHasLibelleTailleMin2() + { + Common.AttributLongueurMin(typeof(Style), nameof(Style.Libelle), 2); + } + + [TestMethod] + public void StyleHasLibelleTailleMax50() + { + Common.AttributLongueurMax(typeof(Style), nameof(Style.Libelle), 50); + } + } +} \ No newline at end of file diff --git a/Webzine.Entity.Tests/TitreTests.cs b/Webzine.Entity.Tests/TitreTests.cs new file mode 100644 index 0000000..9908434 --- /dev/null +++ b/Webzine.Entity.Tests/TitreTests.cs @@ -0,0 +1,241 @@ +namespace Webzine.Entity.Tests +{ + using Microsoft.VisualStudio.TestTools.UnitTesting; + + /// + /// Tests de l'entité . + /// Vérifie que les contraintes imposées (nom du champ, longueur max du champ, + /// champ obligatoire, libellé du champ, clé primaire...) sont bien respectées. + /// + [TestClass] + public class TitreTests + { + [TestMethod] + public void TitreHasIdTitre() + { + Common.HasProperty(typeof(Titre), nameof(Titre.IdTitre)); + } + + [TestMethod] + public void TitreHasIdArtiste() + { + Common.HasProperty(typeof(Titre), nameof(Titre.IdArtiste)); + } + + [TestMethod] + public void TitreHasArtiste() + { + Common.HasProperty(typeof(Titre), nameof(Titre.Artiste)); + } + + [TestMethod] + public void TitreHasLibelle() + { + Common.HasProperty(typeof(Titre), nameof(Titre.Libelle)); + } + + [TestMethod] + public void TitreHasLibelleDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.Libelle), "Titre"); + } + + [TestMethod] + public void TitreHasLibelleRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.Libelle)); + } + + [TestMethod] + public void TitreHasLibelleTailleMin1() + { + Common.AttributLongueurMin(typeof(Titre), nameof(Titre.Libelle), 1); + } + + [TestMethod] + public void TitreHasLibelleTailleMax200() + { + Common.AttributLongueurMax(typeof(Titre), nameof(Titre.Libelle), 200); + } + + [TestMethod] + public void TitreHasChronique() + { + Common.HasProperty(typeof(Titre), nameof(Titre.Chronique)); + } + + [TestMethod] + public void TitreHasChroniqueRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.Chronique)); + } + + [TestMethod] + public void TitreHasChroniqueTailleMin10() + { + Common.AttributLongueurMin(typeof(Titre), nameof(Titre.Chronique), 10); + } + + [TestMethod] + public void TitreHasChroniqueTailleMax4000() + { + Common.AttributLongueurMax(typeof(Titre), nameof(Titre.Chronique), 4000); + } + + [TestMethod] + public void TitreHasDateCreation() + { + Common.HasProperty(typeof(Titre), nameof(Titre.DateCreation)); + } + + [TestMethod] + public void TitreHasDateCreationRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.DateCreation)); + } + + [TestMethod] + public void TitreHasDateCreationDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.DateCreation), "Date de création"); + } + + [TestMethod] + public void TitreHasDuree() + { + Common.HasProperty(typeof(Titre), nameof(Titre.Duree)); + } + + [TestMethod] + public void TitreHasDureeDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.Duree), "Durée en secondes"); + } + + [TestMethod] + public void TitreHasDateSortie() + { + Common.HasProperty(typeof(Titre), nameof(Titre.DateSortie)); + } + + [TestMethod] + public void TitreHasDateSortieRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.DateSortie)); + } + + [TestMethod] + public void TitreHasDateSortieDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.DateSortie), "Date de sortie"); + } + + [TestMethod] + public void TitreHasUrlJaquette() + { + Common.HasProperty(typeof(Titre), nameof(Titre.UrlJaquette)); + } + + [TestMethod] + public void TitreHasUrlJaquetteRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.UrlJaquette)); + } + + [TestMethod] + public void TitreHasUrlJaquetteDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.UrlJaquette), "Jaquette de l'album"); + } + + [TestMethod] + public void TitreHasUrlJaquetteTailleMax250() + { + Common.AttributLongueurMax(typeof(Titre), nameof(Titre.UrlJaquette), 250); + } + + [TestMethod] + public void TitreHasUrlEcoute() + { + Common.HasProperty(typeof(Titre), nameof(Titre.UrlEcoute)); + } + + [TestMethod] + public void TitreHasUrlEcouteDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.UrlEcoute), "URL d'écoute"); + } + + [TestMethod] + public void TitreHasUrlEcouteTailleMin13() + { + Common.AttributLongueurMin(typeof(Titre), nameof(Titre.UrlEcoute), 13); + } + + [TestMethod] + public void TitreHasUrlEcouteTailleMax250() + { + Common.AttributLongueurMax(typeof(Titre), nameof(Titre.UrlEcoute), 250); + } + + [TestMethod] + public void TitreHasNbLectures() + { + Common.HasProperty(typeof(Titre), nameof(Titre.NbLectures)); + } + + [TestMethod] + public void TitreHasNbLecturesDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.NbLectures), "Nombre de lectures"); + } + + [TestMethod] + public void TitreHasNbLecturesRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.NbLectures)); + } + + [TestMethod] + public void TitreHasNbLikes() + { + Common.HasProperty(typeof(Titre), nameof(Titre.NbLikes)); + } + + [TestMethod] + public void TitreHasNbLikesDisplayValid() + { + Common.AttributDisplay(typeof(Titre), nameof(Titre.NbLikes), "Nombre de likes"); + } + + [TestMethod] + public void TitreHasNbLikesRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.NbLikes)); + } + + [TestMethod] + public void TitreHasAlbum() + { + Common.HasProperty(typeof(Titre), nameof(Titre.Album)); + } + + [TestMethod] + public void TitreHasAlbumRequis() + { + Common.AttributRequis(typeof(Titre), nameof(Titre.Album)); + } + + [TestMethod] + public void TitreHasCommentaires() + { + Common.HasProperty(typeof(Titre), nameof(Titre.Commentaires)); + } + + [TestMethod] + public void TitreUrlJaquetteeIsNotMandatory() + { + Common.AttributHasNotUrlValidation(typeof(Titre), nameof(Titre.UrlJaquette)); + } + } +} diff --git a/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj b/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj new file mode 100644 index 0000000..2e335bf --- /dev/null +++ b/Webzine.Entity.Tests/Webzine.Entity.Tests.csproj @@ -0,0 +1,28 @@ + + + + net10.0 + latest + enable + enable + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + stylecop.json + + + + diff --git a/Webzine.Entity/Fixtures/SeedDataLocal.cs b/Webzine.Entity/Fixtures/SeedDataLocal.cs new file mode 100644 index 0000000..71eb46f --- /dev/null +++ b/Webzine.Entity/Fixtures/SeedDataLocal.cs @@ -0,0 +1,5 @@ +namespace Webzine.EntitiesContext; + +public class SeedDataLocal +{ +} \ No newline at end of file diff --git a/Webzine.Entity/Fixtures/SeedDataSpotify.cs b/Webzine.Entity/Fixtures/SeedDataSpotify.cs new file mode 100644 index 0000000..71bd7fc --- /dev/null +++ b/Webzine.Entity/Fixtures/SeedDataSpotify.cs @@ -0,0 +1,6 @@ +namespace Webzine.EntitiesContext; + +public class SeedDataSpotify +{ + +} \ No newline at end of file diff --git a/Webzine.Entity/Webzine.Entity.csproj b/Webzine.Entity/Webzine.Entity.csproj new file mode 100644 index 0000000..33c0658 --- /dev/null +++ b/Webzine.Entity/Webzine.Entity.csproj @@ -0,0 +1,24 @@ + + + + net10.0 + enable + enable + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + stylecop.json + + + + diff --git a/Webzine.Repository.Contracts/IArtisteRepository.cs b/Webzine.Repository.Contracts/IArtisteRepository.cs new file mode 100644 index 0000000..1e4a369 --- /dev/null +++ b/Webzine.Repository.Contracts/IArtisteRepository.cs @@ -0,0 +1,17 @@ +// using Webzine.Entity; + +namespace Webzine.Repository.Contracts +{ + public interface IArtisteRepository + { + // void Add(Artiste artiste); + + // void Delete(Artiste artiste); + + // Artiste Find(int id); + + // IEnumerable FindAll(); + + // void Update(Artiste artiste); + } +} \ No newline at end of file diff --git a/Webzine.Repository.Contracts/ICommentaireRepository.cs b/Webzine.Repository.Contracts/ICommentaireRepository.cs new file mode 100644 index 0000000..f1608b2 --- /dev/null +++ b/Webzine.Repository.Contracts/ICommentaireRepository.cs @@ -0,0 +1,15 @@ +// using Webzine.Entity; + +namespace Webzine.Repository.Contracts +{ + public interface ICommentaireRepository + { + // void Add(Commentaire commentaire); + + // void Delete(Commentaire commentaire); + + // Commentaire Find(int id); + + // IEnumerable FindAll(); + } +} \ No newline at end of file diff --git a/Webzine.Repository.Contracts/IStyleRepository.cs b/Webzine.Repository.Contracts/IStyleRepository.cs new file mode 100644 index 0000000..cceeae7 --- /dev/null +++ b/Webzine.Repository.Contracts/IStyleRepository.cs @@ -0,0 +1,17 @@ +// using Webzine.Entity; + +namespace Webzine.Repository.Contracts +{ + public interface IStyleRepository + { + // void Add(Style style); + + // void Delete(Style style); + + // Style Find(int id); + + // IEnumerable