public async Task <IActionResult> RegisterDriver([FromBody] DriverRegistrationDto model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var userIdentity = _mapper.Map <AppUser>(model); var result = await _userManager.CreateAsync(userIdentity, model.Password); if (!result.Succeeded) { if (result.Errors.FirstOrDefault(o => o.Code == "DuplicateUserName") != null) { ModelState.AddModelError(nameof(CustomerRegistrationDto), "User name already taken"); } return(BadRequest(ModelState)); } var driver = _mapper.Map <Driver>(model); driver.IdentityId = userIdentity.Id; var addDbres = await _usersRepository.AddDriver(driver); var customerFromDriver = _mapper.Map <Customer>(driver); var addres = await _usersRepository.AddCustomer(customerFromDriver); if (!addres || !addDbres) { return(Conflict()); } var driverDto = _mapper.Map <DriverDto>(model); driverDto.Id = driver.Id; if (!userIdentity.EmailConfirmed) { var confirmToken = await _userManager.GenerateEmailConfirmationTokenAsync(userIdentity); var emailConfirmUrl = Url.RouteUrl("ConfirmEmail", new { uid = userIdentity.Id, token = confirmToken }, this.Request.Scheme); try { await _emailSender.SendEmailAsync(userIdentity.Email, "Confirm your account", $"Please confirm your account by this ref <a href=\"{emailConfirmUrl}\">link</a>"); } catch { ModelState.AddModelError("email", "Failed to send confirmation letter"); return(BadRequest(ModelState)); } } return(CreatedAtRoute("GetDriver", new { id = driver.Id }, driverDto)); }