Пример #1
0
        public async Task <RegisterResponse> Register(RegisterRequest model)
        {
            await IsUserExist(model);

            User user = _mapper.Map <UserRequest, User>(model);

            user.PhoneNumber          = user.PhoneNumber.PhoneNumberFormat();
            user.PhoneNumberConfirmed = true;
            IdentityResult status = await _userManager.CreateAsync(user, model.Password);

            if (!status.Succeeded)
            {
                throw new AppExсeption(StatusCodes.Status400BadRequest, status.Errors.FirstOrDefault().ToString());
            }
            await _userManager.AddToRoleAsync(user, model.Role.ToString());

            RegisterResponse result = _mapper.Map <User, RegisterResponse>(user);

            result.Role = model.Role;
            PhoneNumber phoneNumber = await _phoneNumberRepository.GetByNumber(user.PhoneNumber);

            if (!(phoneNumber is null))
            {
                List <Contact> contacts = await _contactRepository.GetByPhone(phoneNumber.Id, user.PhoneNumber);

                foreach (var contact in contacts)
                {
                    contact.FriendId = user.Id;
                }
                await _contactRepository.UpdateRange(contacts);
            }
            var confirmEmail = new ConfirmEmailView();
            var code         = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
            confirmEmail.CallbackUrl = _emailHelper.GetEmailConfirmUrl(code, user.Email);
            confirmEmail.UserName    = model.UserName;
            var template = await _emailHelper.GetTemplateHtmlAsStringAsync("ConfirmEmailView", confirmEmail);

            await _emailHelper.SendEmailAsync(model.Email, "Confirm Email", template);

            return(result);
        }