public async Task <IActionResult> MakeCustomerDriver([FromBody] CustomerDriverUpgradeDto customerDriverUpgradeDto) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var uid = User.Claims.Single(c => c.Type == Constants.Strings.JwtClaimIdentifiers.Id).Value; var customer = _userRepository.GetCustomerByIdentityId(uid); if (customer == null) { return(NotFound()); } var testDriver = _userRepository.GetDriverByIdentityId(uid); if (testDriver != null) { return(BadRequest()); } var driver = _mapper.Map <Driver>(customer); _mapper.Map(customerDriverUpgradeDto, driver); await _userRepository.AddDriver(driver); var user = await _userManager.FindByIdAsync(uid); var driverDto = _mapper.Map <DriverDto>(user); _mapper.Map(driver, driverDto); return(CreatedAtRoute("GetDriver", new { id = driver.Id }, driverDto)); }
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)); }