Beispiel #1
0
        public async Task <IActionResult> RegisterDoctor(RegisterDoctorViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var user = new ApplicationUser
            {
                UserName = model.Name,
                IsActive = true
            };

            var createUserResult = await _userManager.CreateAsync(user, model.Password);

            if (createUserResult.Succeeded)
            {
                await _userManager.AddToRoleAsync(user, "Doctor");

                await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.GivenName, model.Name));

                var signInResult = await _signInManager.PasswordSignInAsync(user, model.Password, false, false);

                if (signInResult.Succeeded)
                {
                    await _appService.AddSpecialization(
                        new Specialization
                    {
                        Name = model.Specialization
                    }, CancellationToken.None);

                    var docsSpec = await _appService.GetSpecializationByName(model.Specialization, CancellationToken.None);

                    var doctor = new Doctor
                    {
                        Name            = model.Name,
                        FirstName       = model.FirstName,
                        LastName        = model.LastName,
                        Phone           = model.Phone,
                        Specialization  = docsSpec,
                        ApplicationUser = user
                    };

                    await _appService.AddDoctor(doctor, CancellationToken.None);

                    return(View("RegisterSuccessful"));
                }
            }

            foreach (var identityError in createUserResult.Errors)
            {
                if (identityError.Code == "DuplicateUserName")
                {
                    ModelState.AddModelError("", "Ta nazwa użytkownika jest już zajęta.");
                }
                else
                {
                    ModelState.AddModelError("", identityError.Description);
                }
            }

            return(View(model));
        }