public AccountController()
 {
     appDbContext = new ApplicationDbContext();
     db           = new JobPostingDBEntities1();
 }
        public async Task <ActionResult> Register(RegisterViewModelCandidate model)
        {
            if (ModelState.IsValid)
            {
                // Todo: Create a folder for each Candidate

                var folderPath = Server.MapPath("~/Data/Candidate/" + model.Email);
                // Chech if Folder is Exists
                byte[] imageData = null;
                if (!Directory.Exists(folderPath))
                {
                    // Create Folder
                    Directory.CreateDirectory(Server.MapPath("~/Data/Candidate/" + model.Email));
                    string fullPathInServer = "~/Data/Candidate/" + model.Email + "/";

                    // Save Cv In Server Side
                    if (model.CvFileName != null)
                    {
                        string cvFileName      = Path.GetFileNameWithoutExtension(model.CvFileName.FileName);
                        string cvFileExtension = Path.GetExtension(model.CvFileName.FileName);
                        string _cvFileName     = cvFileName + cvFileExtension;
                        model.CV    = fullPathInServer + _cvFileName;
                        _cvFileName = Path.Combine(Server.MapPath(fullPathInServer), _cvFileName);
                        model.CvFileName.SaveAs(_cvFileName);
                    }

                    // Save Photo In Server Side
                    if (model.PhotoFileName != null)
                    {
                        string photoFileName      = Path.GetFileNameWithoutExtension(model.PhotoFileName.FileName);
                        string photoFileExtension = Path.GetExtension(model.PhotoFileName.FileName);
                        string _photoFileName     = photoFileName + photoFileExtension;
                        model.Photo    = fullPathInServer + _photoFileName;
                        _photoFileName = Path.Combine(Server.MapPath(fullPathInServer), _photoFileName);
                        model.PhotoFileName.SaveAs(_photoFileName);

                        // Todo: convert the user uploaded Photo as Byte Array before save to DB/ ApplicationDbContext => AspNetUserTable

                        if (Request.Files.Count > 0)
                        {
                            HttpPostedFileBase fileBase = Request.Files["PhotoFileName"];
                            using (var binary = new BinaryReader(fileBase.InputStream))
                            {
                                imageData = binary.ReadBytes(fileBase.ContentLength);
                            }
                        }
                    }

                    // Save Cover Letter In Server Side
                    if (model.CoverLetterFileName != null)
                    {
                        string coverLetterFileName      = Path.GetFileNameWithoutExtension(model.CoverLetterFileName.FileName);
                        string coverLetterFileExtension = Path.GetExtension(model.CoverLetterFileName.FileName);
                        string _coverLetterFileName     = coverLetterFileName + coverLetterFileExtension;
                        model.CoverLetter    = fullPathInServer + _coverLetterFileName;
                        _coverLetterFileName = Path.Combine(Server.MapPath(fullPathInServer), _coverLetterFileName);
                        model.CoverLetterFileName.SaveAs(_coverLetterFileName);
                    }
                }


                var user = new ApplicationUser {
                    UserName = model.Email, Email = model.Email, FirstName = model.FirstName, LastName = model.LastName
                };

                if (model.PhotoFileName != null)
                {
                    user.UserPhoto = imageData;
                }

                var result = await UserManager.CreateAsync(user, model.Password);

                if (result.Succeeded)
                {
                    var res = await UserManager.AddToRoleAsync(user.Id, "candidate");

                    using (JobPostingDBEntities1 db = new JobPostingDBEntities1())
                    {
                        var newCandidate = new Candidate
                        {
                            CandidateSecondID = user.Id,
                            FirstName         = model.FirstName,
                            LastName          = model.LastName,
                            Address           = model.Adresse,
                            Bio         = model.Bio,
                            DateOfBirth = model.DateOfBirth,
                            Email       = model.Email,
                            PhoneNumber = model.PhoneNumber,
                            Password    = model.Password,
                            Photo       = model.Photo,
                            Cv          = model.CV,
                            CoverLetter = model.CoverLetter
                        };

                        //db.Entry<Candidate>().State = System.Data.Entity.EntityState.Added;

                        db.Candidates.Add(newCandidate);
                        db.SaveChanges();
                    }

                    await SignInManager.SignInAsync(user, isPersistent : false, rememberBrowser : false);


                    // Pour plus d'informations sur l'activation de la confirmation de compte et de la réinitialisation de mot de passe, visitez https://go.microsoft.com/fwlink/?LinkID=320771
                    // Envoyer un message électronique avec ce lien
                    // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                    // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                    // await UserManager.SendEmailAsync(user.Id, "Confirmez votre compte", "Confirmez votre compte en cliquant <a href=\"" + callbackUrl + "\">ici</a>");


                    return(RedirectToAction("Index", "Home"));
                }
                AddErrors(result);
            }

            // Si nous sommes arrivés là, un échec s’est produit. Réafficher le formulaire
            return(View(model));
        }