private void ValidationCarteIdentite(IDCarte idCarte)
        {
            if (!String.IsNullOrEmpty(idCarte.RegistreNational))
            {
                string NissPattern = @"^[0-9]{2}.[0-9]{2}.[0-9]{2}-[0-9]{3}.[0-9]{2}$";
                var    regexMatch  = Regex.Match(idCarte.RegistreNational, NissPattern);
                if (!regexMatch.Success)
                {
                    throw new CustomBadRequestException(MessageErreur.FormatRegistreNationalInvalide);
                }
            }

            if (String.IsNullOrEmpty(idCarte.Nom))
            {
                throw new CustomBadRequestException(MessageErreur.NomNonReference);
            }

            if (String.IsNullOrEmpty(idCarte.Prenom))
            {
                throw new CustomBadRequestException(MessageErreur.PrenomNonReference);
            }

            if (idCarte.DateNaissance == defaultDate)
            {
                throw new CustomBadRequestException(MessageErreur.DateNaissanceNonReference);
            }

            if (idCarte.DateValidation == defaultDate)
            {
                throw new CustomBadRequestException(MessageErreur.DateValidationeNonReference);
            }

            if (idCarte.DateExpiration == defaultDate)
            {
                throw new CustomBadRequestException(MessageErreur.DateExpirationNonReference);
            }

            if (DateTime.Compare(idCarte.DateExpiration, idCarte.DateValidation) < 0)
            {
                throw new CustomBadRequestException(MessageErreur.DateValidationInvalide);
            }

            if (DateTime.Compare(idCarte.DateExpiration, DateTime.Today) < 0)
            {
                throw new CustomBadRequestException(MessageErreur.CarteIdentiteExpire);
            }

            if (idCarte.CalculerAge(idCarte.DateNaissance) < AgeMinimum)
            {
                throw new CustomBadRequestException(MessageErreur.AgeMinimumRequis);
            }
        }
        public Core.Domaines.Membre CreerMembre(CreerMembreRequete requete)
        {
            if (requete == null)
            {
                throw new CustomBadRequestException(MessageErreur.RequeteNull);
            }

            if (String.IsNullOrEmpty(requete.Telephone) && String.IsNullOrEmpty(requete.Email))
            {
                throw new CustomBadRequestException(MessageErreur.EmailEtTelephoneNonInvalide);
            }

            if (!String.IsNullOrEmpty(requete.Email))
            {
                string pattern    = @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";
                var    regexMatch = Regex.Match(requete.Email, pattern);
                if (!regexMatch.Success)
                {
                    throw new CustomBadRequestException(MessageErreur.FormatEmailInvalide);
                }
            }

            if (!String.IsNullOrEmpty(requete.Telephone))
            {
                string pattern    = @"^0[0-9]{9}$";
                var    regexMatch = Regex.Match(requete.Telephone, pattern);
                if (!regexMatch.Success)
                {
                    throw new CustomBadRequestException(MessageErreur.FormatTelephoneInvalide);
                }
            }
            var idCarteExistant = _context.IDCartes.SingleOrDefault(x => x.RegistreNational == requete.CarteIdentite.RegistreNational);

            if (idCarteExistant != null)
            {
                throw new CustomNotFoundException(MessageErreur.RegistreNationalDejaExistant);
            }

            var nouvelleIDCarte = new IDCarte
            {
                Nom              = requete.CarteIdentite.Nom,
                Prenom           = requete.CarteIdentite.Nom,
                DateNaissance    = requete.CarteIdentite.DateNaissance,
                RegistreNational = requete.CarteIdentite.RegistreNational,
                DateValidation   = requete.CarteIdentite.DateValidation,
                DateExpiration   = requete.CarteIdentite.DateExpiration,
                NumeroCarte      = requete.CarteIdentite.NumeroCarte
            };

            ValidationCarteIdentite(nouvelleIDCarte);

            var nouvelleCarteMembre = new MembreCarte
            {
                Code     = Guid.NewGuid().ToString(),
                IsActive = true
            };

            var nouveauMembre = new Core.Domaines.Membre
            {
                Email                = requete.Email,
                Telephone            = requete.Telephone,
                IsBlacklister        = false,
                DebutDateBlacklister = new DateTime(),
                FinDateBlacklister   = new DateTime(),
                CarteIdentites       = new List <IDCarte>()
                {
                    nouvelleIDCarte
                },
                MembreCartes = new List <MembreCarte>()
                {
                    nouvelleCarteMembre
                }
            };

            _context.Membres.Add(nouveauMembre);
            _context.SaveChanges();
            return(nouveauMembre);
        }