public void Create(JoueurDetailsViewModel joueur)
 {
     if (joueur.Id == 0 || !BddContext.Joueurs.Any(j => j.Id == joueur.Id))
     {
         if (joueur.Id != 0)
             joueur.Id = 0;
         Joueur joueurBdd = convertToBddPlayer(joueur);
         BddContext.Joueurs.Add(joueurBdd);
         BddContext.SaveChanges();
     }
     else
     {
         this.Update(joueur);
         /*
         Joueur joueurBdd = bddContext.Joueurs.First(j => j.Id == joueur.Id);
         joueurBdd.Nom = joueur.Nom;
         joueurBdd.Prenom = joueur.Prenom;
         joueurBdd.Categorie = joueur.Categorie;
         joueurBdd.JoueurPostes.RemoveAll(jp => jp.IdJoueur == joueur.Id);
         foreach(string nomPoste in joueur.Postes)
         {
             Poste poste = bddContext.Postes.First(p => p.Nom.Equals(nomPoste));
             if (poste != null)
                 joueurBdd.JoueurPostes.Add(new JoueurPoste()
                 {
                     IdPoste = poste.Id,
                     Poste = poste
                 });
         }
         bddContext.SaveChanges();
         */
     }
 }
 // GET: /<controller>/
 public IActionResult Details(int? id)
 {
     JoueurDetailsViewModel viewModel = new JoueurDetailsViewModel();
     if(id != null)
     {
         JoueurDetailsViewModel joueur = Service.GetById(id.Value);
         viewModel.Id = joueur.Id;
         viewModel.Nom = joueur.Nom;
         viewModel.Prenom = joueur.Prenom;
     }
     return View(viewModel);
 }
        public IActionResult Details(JoueurDetailsViewModel JoueurDetails)
        {
            JoueurDetailsViewModel joueur = new JoueurDetailsViewModel();
            if (JoueurDetails.Id != null)
            {
                joueur.Id = JoueurDetails.Id.Value;
            }
            joueur.Nom = JoueurDetails.Nom;
            joueur.Prenom = JoueurDetails.Prenom;

            Service.Update(joueur);
            return RedirectToAction(nameof(JoueurController.Index), "Joueur", new { Message = "Joueur modifié"});
        }
        private Joueur convertToBddPlayer(JoueurDetailsViewModel joueurAPI)
        {
            Data.Models.Joueur joueur = new Data.Models.Joueur();
            joueur.Nom = joueurAPI.Nom;
            joueur.Prenom = joueurAPI.Prenom;
            joueur.Categorie = joueurAPI.Categorie;
            if (joueurAPI.Id != null)
                joueur.Id = joueurAPI.Id.Value;

            if (joueurAPI.Postes != null && joueurAPI.Postes.Count > 0)
            {
                foreach (string nomPoste in joueurAPI.Postes)
                {
                    Poste poste = BddContext.Postes.First(p => p.Nom.Equals(nomPoste));
                    if (poste != null)
                        if (joueur.JoueurPostes == null)
                        {
                            joueur.JoueurPostes = new List<JoueurPoste>();
                        }
                    joueur.JoueurPostes.Add(new JoueurPoste()
                    {
                        IdPoste = poste.Id,
                        Poste = poste
                    });

                }
            }
            return joueur;
        }
 private JoueurDetailsViewModel convertToAPIPlayer(Joueur joueurBdd)
 {
     JoueurDetailsViewModel joueurApi = new JoueurDetailsViewModel();
     joueurApi.Id = joueurBdd.Id;
     joueurApi.Nom = joueurBdd.Nom;
     joueurApi.Prenom = joueurBdd.Prenom;
     joueurApi.Categorie = joueurBdd.Categorie;
     joueurApi.Postes = new List<string>();
     if (joueurBdd.JoueurPostes != null)
     {
         foreach (JoueurPoste joueurPoste in joueurBdd.JoueurPostes)
         {
             joueurApi.Postes.Add(joueurPoste.Poste.Nom);
         }
     }
     return joueurApi;
 }
        internal void Update(JoueurDetailsViewModel joueur)
        {
            if (joueur.Id == 0 || !BddContext.Joueurs.Any(j => j.Id == joueur.Id))
            {
                this.Create(joueur);
            }
            else
            {
                Joueur joueurBdd = BddContext.Joueurs
                                             .Where(item => item.Id == joueur.Id)
                                             .Include(item => item.JoueurPostes)
                                             .ThenInclude(item => item.Poste).FirstOrDefault();
                if (joueurBdd != null)
                {
                    joueurBdd.Categorie = joueur.Categorie;
                    joueurBdd.Nom = joueur.Nom;
                    joueurBdd.Prenom = joueur.Prenom;

                    List<String> listPosteBdd = new List<string>();
                    List<String> listPosteRecus = new List<string>();

                    if (joueurBdd.JoueurPostes != null)
                    {
                        listPosteBdd = joueurBdd.JoueurPostes.Select(jp => jp.Poste).Select(p => p.Nom).ToList();
                    }
                    if (joueur.Postes != null)
                    {
                        foreach (string nomPoste in joueur.Postes)
                        {
                            Poste poste = BddContext.Postes.First(p => p.Nom.Equals(nomPoste));
                            if (poste != null)
                            {
                                listPosteRecus.Add(poste.Nom);
                                if (joueurBdd.JoueurPostes == null)
                                    joueurBdd.JoueurPostes = new List<JoueurPoste>();

                                if (!listPosteBdd.Contains(poste.Nom))
                                {
                                    joueurBdd.JoueurPostes.Add(new JoueurPoste()
                                    {
                                        IdPoste = poste.Id,
                                        Poste = poste
                                    });
                                }
                            }
                        }
                        List<JoueurPoste> listJoueurPosteBdd = joueurBdd.JoueurPostes.ToList();
                        foreach (JoueurPoste joueurPoste in listJoueurPosteBdd)
                        {
                            if (!listPosteRecus.Contains(joueurPoste.Poste.Nom))
                            {
                                joueurBdd.JoueurPostes.Remove(joueurPoste);
                            }
                        }
                    }
                    else
                    {
                        // On fait autre chose ?
                    }

                    BddContext.SaveChanges();
                }
            }
        }