Merge pull request 'remi' (#72) from remi into master
continuous-integration/drone/push Build is passing Details

Reviewed-on: remi.lavergne/SAE2.01-IHM_-_Remi_LAVERGNE_-_Yvan_CALATAYUD#72
pull/73/head
Rémi LAVERGNE 2 years ago
commit d4ceb2cb47

@ -30,7 +30,7 @@ namespace DataContractPersistance
{
data = JsonSerializer.ReadObject(s) as DataToPersist;
}
return (data!.Jeux, data.Admins, data.Utilisateurs);
return (data!.Jeux, data!.Admins, data!.Utilisateurs);
}
public void SauvegardeDonnees(ObservableCollection<Jeu> jeux, List<Admin> admins, List<Utilisateur> users)
@ -45,7 +45,7 @@ namespace DataContractPersistance
Directory.CreateDirectory(FilePath);
}
DataToPersist data = new DataToPersist();
DataToPersist? data = new DataToPersist();
data.Jeux = jeux;
data.Admins = admins;
data.Utilisateurs = users;

@ -28,7 +28,7 @@ namespace DataContractPersistance
{
data = serializer.ReadObject(s) as DataToPersist;
}
return (data!.Jeux, data.Admins, data.Utilisateurs);
return (data!.Jeux, data!.Admins, data!.Utilisateurs);
}
public void SauvegardeDonnees(ObservableCollection<Jeu> jeux, List<Admin> admins, List<Utilisateur> users)
@ -43,7 +43,7 @@ namespace DataContractPersistance
Directory.CreateDirectory(FilePath);
}
DataToPersist data = new DataToPersist();
DataToPersist? data = new DataToPersist();
data.Jeux = jeux;
data.Admins = admins;
data.Utilisateurs = users;

@ -14,7 +14,6 @@ public partial class BoutonVoir : ContentView
var selectedjeu = (sender as Button)?.BindingContext as Jeu;
if (selectedjeu != null)
{
//await Shell.Current.GoToAsync(nameof(PageJeu(selectedjeu)); ---- Ne marche pas ----
await Navigation.PushAsync(new PageJeu(selectedjeu));
}
}

@ -35,7 +35,7 @@
</LinearGradientBrush>
</Frame.Background>
<Frame HeightRequest="48" WidthRequest="48" CornerRadius="24" VerticalOptions="Center" HorizontalOptions="Center" IsClippedToBounds="True">
<Image Source="default_user.png" Aspect="AspectFill"/>
<Image Source="{Binding AccueilManager.ConnectedUser.PhotoProfil}" Aspect="AspectFill"/>
</Frame>
</Frame>
<Label Text="{Binding AccueilManager.ConnectedUser.Pseudo}" FontSize="18" FontFamily="AladinRegular" TextColor="{StaticResource Black}" VerticalTextAlignment="Center"/>
@ -105,7 +105,7 @@
Padding="25,25,0,25"
/>
<Grid Grid.Row="6">
<Grid Grid.Row="6" Padding="0,0,0,20">
<VerticalStackLayout Spacing="30" BindableLayout.ItemsSource="{Binding AccueilManager.TopRatedGames}">
<BindableLayout.ItemTemplate>
<DataTemplate>

@ -15,7 +15,7 @@
</LinearGradientBrush>
</Grid.Background>
<Grid RowDefinitions="166,*" ColumnDefinitions="30,*,30" Padding="10,20,10,0">
<Grid Padding="10,20,10,0">
<Image Source="arrowback" VerticalOptions="Start" WidthRequest="30">
<Image.GestureRecognizers>
<TapGestureRecognizer Tapped="Back_Tapped"/>
@ -29,9 +29,9 @@
<Button Grid.Row="2" Grid.Column="1" HeightRequest="50" Text="Ajouter un Jeu" TextColor="Black" FontFamily="PTSansCaption-Bold" FontSize="14" Clicked="OnButtonClicked"/>
<Button Grid.Row="3" Grid.Column="1" HeightRequest="50" Text="Gérer un jeu" TextColor="Black" FontFamily="PTSansCaption-Bold" FontSize="14"/>
<Button IsEnabled="False" Grid.Row="3" Grid.Column="1" HeightRequest="50" Text="Gérer un jeu" TextColor="Black" FontFamily="PTSansCaption-Bold" FontSize="14"/>
<Button Grid.Row="4" Grid.Column="1" HeightRequest="50" Text="Supprimer un jeu" TextColor="Black" FontFamily="PTSansCaption-Bold" FontSize="14"/>
<Button Grid.Row="4" Grid.Column="1" HeightRequest="50" Text="Supprimer un jeu" TextColor="Black" FontFamily="PTSansCaption-Bold" FontSize="14" Clicked="OnDeleteClicked"/>
</Grid>

@ -49,7 +49,7 @@ public partial class PageAdmin : ContentPage
int etape = 1;
bool annuler = false;
while (etape <= 9 && !annuler)
while (etape <= 10 && !annuler)
{
switch (etape)
{
@ -61,7 +61,7 @@ public partial class PageAdmin : ContentPage
}
break;
case 2:
resume = await DisplayPromptAsync("Informations sur le Jeu [2/10]", "Résumé du jeu", accept: "Terminer", cancel: "Annuler", placeholder: "Résumé du jeu");
resume = await DisplayPromptAsync("Informations sur le Jeu [2/10]", "Résumé du jeu", accept: "Suivant", cancel: "Annuler", placeholder: "Résumé du jeu");
if (string.IsNullOrEmpty(resume))
{
annuler = true;
@ -96,7 +96,7 @@ public partial class PageAdmin : ContentPage
}
break;
case 7:
note = await DisplayPromptAsync("Informations sur le Jeu [7/10]", "Note de 0 à 10", accept: "Suivant", cancel: "Annuler", maxLength: 3, placeholder: "4,5");
note = await DisplayPromptAsync("Informations sur le Jeu [7/10]", "Note de 0 à 10",accept: "Suivant", cancel: "Annuler", maxLength: 3, placeholder: "4,5");
if (string.IsNullOrEmpty(note))
{
annuler = true;
@ -144,4 +144,33 @@ public partial class PageAdmin : ContentPage
Debug.WriteLine("Annulation de l'ajout du jeu.");
}
}
private async void OnDeleteClicked(object sender, EventArgs e)
{
var gameNames = GetGameNames().ToArray();
string action = await DisplayActionSheet("Sélectionnez un jeu à supprimer", "Annuler", null, gameNames);
if (action != null && action != "Annuler")
{
var jeuASupprimer = GetGameByName(action);
if (jeuASupprimer != null)
{
AdminManager.ListJeux.Remove(jeuASupprimer);
AdminManager.SauvegardeDonnees();
await DisplayAlert("Succès",$"{jeuASupprimer.Nom} a bien été supprimé de l'application.", "Ok");
Debug.WriteLine($"Le jeu {jeuASupprimer.Nom} a été supprimé");
}
}
}
private List<string> GetGameNames()
{
return AdminManager.ListJeux.Select(jeu => jeu.Nom).ToList();
}
private Jeu GetGameByName(string name)
{
return AdminManager.ListJeux.FirstOrDefault(jeu => jeu.Nom == name);
}
}

@ -31,11 +31,13 @@
<Entry x:Name="mdp" Placeholder="Mot de passe" IsPassword="True" ClearButtonVisibility="WhileEditing" BackgroundColor="White" PlaceholderColor="#5E5E5E" />
</Border>
<Button Text="Sélectionner une photo de profil" TextColor="{StaticResource Black}" HorizontalOptions="Center" VerticalOptions="Center" BackgroundColor="#DFE4FF" Clicked="OnSelectPhotoClicked"/>
<Button Text="S'inscrire"
VerticalOptions="Center"
HorizontalOptions="Center"
BackgroundColor="#FAD05D"
TextColor="Black"
TextColor="{StaticResource Black}"
FontFamily="RobotoBold"
Margin="0,50,0,10"
Padding="60,0,60,0"

@ -10,7 +10,7 @@ using Font = Microsoft.Maui.Font;
public partial class PageInscription : ContentPage
{
string ImagePath { get; set; } = "default_user.png";
public Manager InscriptionManager => (App.Current as App).MyManager;
public PageInscription()
@ -46,6 +46,7 @@ public partial class PageInscription : ContentPage
}
Utilisateur utilisateur = new Utilisateur(mail, username, password);
utilisateur.PhotoProfil = ImagePath;
InscriptionManager.AddUtilisateur(utilisateur);
InscriptionManager.SauvegardeDonnees();
Debug.WriteLine(InscriptionManager.Utilisateurs.Count);
@ -86,7 +87,19 @@ public partial class PageInscription : ContentPage
return hasUppercase && hasLowercase && hasDigit;
}
}
private async void OnSelectPhotoClicked(object sender, EventArgs e)
{
var photo = await MediaPicker.PickPhotoAsync();
if (photo != null)
{
ImagePath = photo.FullPath;
}
else
{
ImagePath = "default_user.png";
}
}
}

@ -16,7 +16,7 @@
</Grid.Background>
<ScrollView>
<Grid RowDefinitions="166,*" ColumnDefinitions="30,*,30" Padding="10,20,10,0">
<Grid RowDefinitions="170,*" ColumnDefinitions="30,*,30" Padding="10,20,10,0">
<Image Source="arrowback" VerticalOptions="Start" WidthRequest="30">
<Image.GestureRecognizers>

@ -19,8 +19,6 @@
<VerticalStackLayout>
<StackLayout Padding="0,30,0,0" HorizontalOptions="Center" VerticalOptions="Center" Grid.Row="2">
<Frame HeightRequest="40" WidthRequest="300" CornerRadius="8">
<SearchBar Placeholder="Rechercher" TextColor="Black" BackgroundColor="#D9D9D9" TextChanged="SearchBar_TextChanged"/>

@ -26,7 +26,7 @@
</LinearGradientBrush>
</Frame.Background>
<Frame HeightRequest="48" WidthRequest="48" CornerRadius="24" VerticalOptions="Center" HorizontalOptions="Center" IsClippedToBounds="True">
<Image Source="default_user.png" Aspect="AspectFill"/>
<Image Source="{Binding ConnectedUser.PhotoProfil}" Aspect="AspectFill"/>
</Frame>
</Frame>
</Grid>

@ -17,12 +17,12 @@ namespace Models
/// <summary>
/// Liste des administrateurs de l'application.
/// </summary>
public List<Admin> Admins { get; private set; }
public List<Admin>? Admins { get; private set; }
/// <summary>
/// Liste des utilisateurs de l'application.
/// </summary>
public List<Utilisateur> Utilisateurs { get; private set; }
public List<Utilisateur>? Utilisateurs { get; private set; }
private ObservableCollection<Jeu> topRatedGames;

@ -12,32 +12,79 @@ using System.Threading.Tasks;
namespace Models
{
/// <summary>
/// Représente un Utilisateur de l'application.
/// </summary>
[DataContract]
[KnownType(typeof(Admin))]
public class Utilisateur
{
/// <summary>
/// Obtient l'adresse e-mail de l'utilisateur.
/// </summary>
[DataMember]
public string Mail { get; private set; }
/// <summary>
/// Obtient le pseudo de l'utilisateur.
/// </summary>
[DataMember]
public string Pseudo { get; private set; }
/// <summary>
/// Obtient le mot de passe de l'utilisateur.
/// </summary>
[DataMember]
public string Mdp { get; private set; }
/// <summary>
/// Obtient ou définit la photo de profil de l'utilisateur.
/// </summary>
[DataMember]
public string PhotoProfil { get; set; }
/// <summary>
/// Obtient la date de création de l'utilisateur.
/// </summary>
[DataMember]
public string DateCreation { get; private set; }
/// <summary>
/// Obtient ou définit une valeur indiquant si l'utilisateur est un administrateur.
/// </summary>
[DataMember]
public bool EstAdmin { get; set; }
/// <summary>
/// Obtient la liste des jeux possédés par l'utilisateur.
/// </summary>
[DataMember]
public ObservableCollection<Jeu> ListePossedes { get; private set; }
/// <summary>
/// Obtient la liste des jeux favoris de l'utilisateur.
/// </summary>
[DataMember]
public ObservableCollection<Jeu> ListeFavoris { get; private set; }
/// <summary>
/// Obtient ou définit le nombre d'avis donnés par l'utilisateur.
/// </summary>
[DataMember]
public int NbAvis { get; set; }
/// <summary>
/// Constructeur qui initialise une nouvelle instance de la classe <see cref="Utilisateur"/>.
/// </summary>
/// <param name="mail">L'adresse e-mail de l'utilisateur.</param>
/// <param name="pseudo">Le pseudo de l'utilisateur.</param>
/// <param name="mdp">Le mot de passe de l'utilisateur.</param>
public Utilisateur(string mail, string pseudo, string mdp)
{
Mail = mail;
Pseudo = pseudo;
Mdp = mdp;
PhotoProfil = "default_user.png";
DateCreation = DateTime.Today.ToString("d");
ListePossedes = new ObservableCollection<Jeu>();
ListeFavoris = new ObservableCollection<Jeu>();

@ -28,6 +28,10 @@ namespace Stub
Jeu Hogwarts = new Jeu("Hogwarts Legacy : L'Héritage de Poudlard", "Hogwarts Legacy est un jeu de rôle d'action et d'aventure solo basé sur l'univers de Harry Potter, dans lequel le joueur incarne un nouveau venu dans le château enchanté tant apprécié des fans des livres et de la franchise cinématographique.", "10 Février 2023", "PC Switch XOne", "Avalanche Software", "Warner Bros. Games", 5, 100, "Solo Action Aventure RPG", "cover_hogwarts.png");
Jeu RE4 = new Jeu("Resident Evil 4", "Six ans se sont écoulés depuis la catastrophe biologique de Raccoon City. L'agent Leon S. Kennedy, l'un des survivants du drame, est envoyé secourir la fille du président qui a été kidnappée. Son enquête le mène jusqu'à un village européen isolé, dont les habitants cachent un effroyable secret. Et ainsi se lève le rideau d'une histoire de sauvetage audacieux et d'horreur atroce, où se mêlent vie, mort, terreur et catharsis.", "24 Mars 2023", "PC XSeries", "CAPCOM Co., Ltd.", "CAPCOM Co., Ltd.", 8, 100, "Solo Action Aventure", "cover_residentevil4.png");
Jeu JediSurvivor = new Jeu("Star Wars Jedi: Survivor", "Poussé aux confins de la galaxie par l'Empire, Cal devra faire face à toujours plus de menaces, parmi lesquelles l'attendent des adversaires au visage familier. En tant qu'un des derniers représentants encore en vie des Chevaliers Jedi, Cal devra faire un choix pendant cette période sombre de l'histoire de la galaxie. Mais jusqu'où sera-t-il prêt à aller pour assurer sa survie et celle de son équipage, et défendre l'héritage de l'Ordre Jedi ?", "28 Avril 2023", "PC XSeries", "Respawn", "Electronic Arts", 5.5, 100, "Solo Action Aventure", "cover_starwarsjedisurvivor.png");
Jeu Temp = new Jeu("A", "Poussé aux confins de la galaxie par l'Empire, Cal devra faire face à toujours plus de menaces, parmi lesquelles l'attendent des adversaires au visage familier. En tant qu'un des derniers représentants encore en vie des Chevaliers Jedi, Cal devra faire un choix pendant cette période sombre de l'histoire de la galaxie. Mais jusqu'où sera-t-il prêt à aller pour assurer sa survie et celle de son équipage, et défendre l'héritage de l'Ordre Jedi ?", "28 Avril 2023", "PC XSeries", "Respawn", "Electronic Arts", 5.5, 100, "Solo Action Aventure", "cover_starwarsjedisurvivor.png");
Jeu Temp2 = new Jeu("B", "Poussé aux confins de la galaxie par l'Empire, Cal devra faire face à toujours plus de menaces, parmi lesquelles l'attendent des adversaires au visage familier. En tant qu'un des derniers représentants encore en vie des Chevaliers Jedi, Cal devra faire un choix pendant cette période sombre de l'histoire de la galaxie. Mais jusqu'où sera-t-il prêt à aller pour assurer sa survie et celle de son équipage, et défendre l'héritage de l'Ordre Jedi ?", "28 Avril 2023", "PC XSeries", "Respawn", "Electronic Arts", 5.5, 100, "Solo Action Aventure", "cover_starwarsjedisurvivor.png");
Jeu Temp3 = new Jeu("C", "Poussé aux confins de la galaxie par l'Empire, Cal devra faire face à toujours plus de menaces, parmi lesquelles l'attendent des adversaires au visage familier. En tant qu'un des derniers représentants encore en vie des Chevaliers Jedi, Cal devra faire un choix pendant cette période sombre de l'histoire de la galaxie. Mais jusqu'où sera-t-il prêt à aller pour assurer sa survie et celle de son équipage, et défendre l'héritage de l'Ordre Jedi ?", "28 Avril 2023", "PC XSeries", "Respawn", "Electronic Arts", 5.5, 100, "Solo Action Aventure", "cover_starwarsjedisurvivor.png");
Jeu Temp4 = new Jeu("D", "Poussé aux confins de la galaxie par l'Empire, Cal devra faire face à toujours plus de menaces, parmi lesquelles l'attendent des adversaires au visage familier. En tant qu'un des derniers représentants encore en vie des Chevaliers Jedi, Cal devra faire un choix pendant cette période sombre de l'histoire de la galaxie. Mais jusqu'où sera-t-il prêt à aller pour assurer sa survie et celle de son équipage, et défendre l'héritage de l'Ordre Jedi ?", "28 Avril 2023", "PC XSeries", "Respawn", "Electronic Arts", 5.5, 100, "Solo Action Aventure", "cover_starwarsjedisurvivor.png");
ListJeu.Add(TheLastOfUs);
ListJeu.Add(ForzaHorizon);
ListJeu.Add(TOTK);
@ -36,6 +40,11 @@ namespace Stub
ListJeu.Add(RE4);
ListJeu.Add(JediSurvivor);
ListJeu.Add(Temp);
ListJeu.Add(Temp2);
ListJeu.Add(Temp3);
ListJeu.Add(Temp4);
return (ListJeu,ListAdmins,ListUsers);
}

@ -26,19 +26,22 @@ namespace Tests
Jeu jeu = new Jeu(nom, resume, sortie, plateformes, developpeur, editeur, note, nbTelechargement, genres, image);
List<string> listPlateformes = plateformes.Split(' ').ToList();
List<string> listGenres = genres.Split(' ').ToList();
// Assert
Assert.Equal(nom, jeu.Nom);
Assert.Equal(resume, jeu.Resume);
Assert.Equal(sortie, jeu.Sortie);
Assert.Equal(plateformes, jeu.Plateformes);
Assert.Equal(listPlateformes, jeu.ListPlateformes);
Assert.Equal(developpeur, jeu.Developpeur);
Assert.Equal(editeur, jeu.Editeur);
Assert.Equal(note, jeu.Note);
Assert.Equal(nbTelechargement, jeu.NbTelechargement);
Assert.Equal(genres, jeu.Genres);
Assert.Equal(listGenres, jeu.ListGenres);
Assert.Equal(image, jeu.Image);
Assert.Empty(jeu.ListeAvis);
Assert.Empty(jeu.ListAvis);
Assert.Equal(0, jeu.NbFavoris);
Assert.Equal(0, jeu.NbPossedes);
}

@ -1,30 +1,11 @@
using Models;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tests
{
public class ManagerTest
{
[Fact]
public void Manager_Creation_Et_Verification()
{
var manager = new Manager();
// Assert
Assert.Empty(manager.Admins);
Assert.Empty(manager.Utilisateurs);
Assert.Empty(manager.TopRatedGames);
Assert.Empty(manager.ListJeuxAffiches);
Assert.Empty(manager.ListJeux);
Assert.Null(manager.ConnectedUser);
}
[Fact]
public void Manager_AddJeux()
{
@ -36,7 +17,6 @@ namespace Tests
manager.AddJeux(jeu);
// Assert
Assert.Single(manager.ListJeux);
Assert.Contains(jeu, manager.ListJeux);
}
@ -45,13 +25,12 @@ namespace Tests
{
var manager = new Manager();
var admin = new Admin("admin@example.com", "admin", "password");
var admin = new Admin("admin@example.com", "adminuser", "password");
manager.AddAdmin(admin);
// Assert
Assert.Single(manager.Admins);
Assert.Contains(admin, manager.Admins);
}
@ -60,25 +39,25 @@ namespace Tests
{
var manager = new Manager();
var utilisateur = new Utilisateur("test@example.com", "test", "password");
var utilisateur = new Utilisateur("user@example.com", "user", "password");
manager.AddUtilisateur(utilisateur);
// Assert
Assert.Single(manager.Utilisateurs);
Assert.Contains(utilisateur, manager.Utilisateurs);
}
[Fact]
public void Manager_ChargerDonnees()
{
// Arrange
var manager = new Manager();
var persistanceManager = new PersistanceManager();
var jeux = new ObservableCollection<Jeu>()
{
new Jeu("Un Jeu", "Description", "1 Janvier 2023", "PC", "Studio", "Editeur", 4.5, 1000, "Action", "test_image.png"),
new Jeu("Un autre Jeu", "Une autre description", "12 Janvier 2023", "PS5", "Studio", "Autre Editeur", 3.8, 500, "Aventure", "test_image.png")
new Jeu("Un Autre Jeu", "Autre Description", "10 Janvier 2023", "PC", "Studio", "Editeur", 4.5, 1000, "Action", "test_image.png")
};
var admins = new List<Admin>()
{
@ -90,18 +69,16 @@ namespace Tests
new Utilisateur("user1@example.com", "user1", "password1"),
new Utilisateur("user2@example.com", "user2", "password2")
};
persistanceManager.SetDonnees(jeux, admins, utilisateurs);
manager.Persistance = persistanceManager;
manager.ListJeux = jeux;
manager.Admins = admins;
manager.Utilisateurs = utilisateurs;
manager.ChargerDonnees();
// Assert
Assert.Equal(jeux, manager.ListJeux);
Assert.Equal(admins, manager.Admins);
Assert.Equal(utilisateurs, manager.Utilisateurs);
Assert.Equal(admins, manager.Admins.ToList()); // Convertit en List<T>
Assert.Equal(utilisateurs, manager.Utilisateurs.ToList()); // Convertit en List<T>
}
[Fact]
@ -109,31 +86,66 @@ namespace Tests
{
var manager = new Manager();
var persistanceManager = new PersistanceManager();
var jeux = new ObservableCollection<Jeu>()
{
new Jeu("Un Jeu", "Description", "1 Janvier 2023", "PC", "Studio", "Editeur", 4.5, 1000, "Action", "test_image.png"),
new Jeu("Un autre Jeu", "Une autre description", "12 Janvier 2023", "PS5", "Studio", "Autre Editeur", 3.8, 500, "Aventure", "test_image.png")
new Jeu("Un Autre Jeu", "Autre Description", "10 Janvier 2023", "PC", "Studio", "Editeur", 4.5, 1000, "Action", "test_image.png")
};
var admins = new List<Admin>()
{
new Admin("admin1@example.com", "adminuser1", "password1"),
new Admin("admin2@example.com", "adminuser2", "password2")
new Admin("admin1@example.com", "admin1", "password1"),
new Admin("admin2@example.com", "admin2", "password2")
};
var utilisateurs = new List<Utilisateur>()
{
new Utilisateur("user1@example.com", "user1", "password1"),
new Utilisateur("user2@example.com", "user2", "password2")
};
manager.ListJeux = jeux;
manager.Admins = admins;
manager.Utilisateurs = utilisateurs;
foreach (var admin in admins)
{
manager.AddAdmin(admin);
}
foreach (var utilisateur in utilisateurs)
{
manager.AddUtilisateur(utilisateur);
}
manager.Persistance = persistanceManager;
manager.SauvegardeDonnees();
// Assert
Assert.True(true); // Vérifie qu'il n'y a aucune exception de levée
Assert.Equal(jeux, persistanceManager.Jeux);
Assert.Equal(admins, persistanceManager.Admins);
Assert.Equal(utilisateurs, persistanceManager.Utilisateurs);
}
}
public class PersistanceManager : IPersistanceManager
{
public ObservableCollection<Jeu>? Jeux { get; private set; }
public List<Admin>? Admins { get; private set; }
public List<Utilisateur>? Utilisateurs { get; private set; }
public void SetDonnees(ObservableCollection<Jeu> jeux, List<Admin> admins, List<Utilisateur> utilisateurs)
{
Jeux = jeux;
Admins = admins;
Utilisateurs = utilisateurs;
}
public (ObservableCollection<Jeu>, List<Admin>, List<Utilisateur>) ChargeDonnees()
{
return (Jeux!, Admins!, Utilisateurs!);
}
public void SauvegardeDonnees(ObservableCollection<Jeu> jeux, List<Admin> admins, List<Utilisateur> utilisateurs)
{
Jeux = jeux;
Admins = admins;
Utilisateurs = utilisateurs;
}
}
}

@ -24,6 +24,8 @@
<ItemGroup>
<ProjectReference Include="..\Models\Models.csproj" />
<ProjectReference Include="..\Stub\Stub.csproj" />
<ProjectReference Include="..\DataContractPersistance\DataContractPersistance.csproj" />
</ItemGroup>
</Project>

Loading…
Cancel
Save