Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }