public async Task <ApplicationUser> SignInUserAsync(UpdateApplicationUserRequest userSingInRequestModel)
        {
            var applicationUserDb = _mapper.Map <ApplicationUserDb>(userSingInRequestModel);

            var userCheck = await _userManager.FindByNameAsync(applicationUserDb?.UserName);

            if (userCheck is null)
            {
                return(null);
            }

            var passwordCheck = await _userManager.CheckPasswordAsync(userCheck, userSingInRequestModel.UserPassword);

            if (!passwordCheck)
            {
                throw new Exception($"Incorrect password or login");
            }

            var result = _mapper.Map <ApplicationUser>(userCheck);

            result.ApplicationUserPassword = userSingInRequestModel.UserPassword;
            result.ApplicationUserRole     = (await _userManager.GetRolesAsync(userCheck)).First();

            return(result);
        }
        public async Task <string> ChangePassword(
            UpdateApplicationUserRequest userChangePassApplicationUserRequest)
        {
            var applicationUserToCreateMapped = _mapper.Map <ApplicationUserDb>(userChangePassApplicationUserRequest);

            try
            {
                var user = await _userManager.FindByIdAsync(applicationUserToCreateMapped.Id);

                var identityResult = await _userManager.ChangePasswordAsync(user,
                                                                            userChangePassApplicationUserRequest.UserPassword,
                                                                            userChangePassApplicationUserRequest.NewPassword);

                if (identityResult.Succeeded)
                {
                    return(userChangePassApplicationUserRequest.NewPassword);
                }

                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public async Task <ApplicationUser> CreateApplicationUserAsync(UpdateApplicationUserRequest userSignUpRequestModel)
        {
            var applicationUserToCreateMapped = _mapper.Map <ApplicationUserDb>(userSignUpRequestModel);

            try
            {
                var identityResultOfCreatingUser = await _userManager.CreateAsync(applicationUserToCreateMapped, userSignUpRequestModel.UserPassword);

                if (identityResultOfCreatingUser.Succeeded)
                {
                    var identityResultOfAddingRoleToCreatedUser = await _userManager.AddToRoleAsync(applicationUserToCreateMapped, userSignUpRequestModel.UserRole);

                    if (identityResultOfAddingRoleToCreatedUser.Succeeded)
                    {
                        var appUserDb = await _userManager.FindByNameAsync(userSignUpRequestModel.UserName);

                        var role = (await _userManager.GetRolesAsync(appUserDb)).First();

                        var result = _mapper.Map <ApplicationUser>(appUserDb);

                        result.ApplicationUserPassword = userSignUpRequestModel.UserPassword;
                        result.ApplicationUserRole     = role;

                        return(result);
                    }
                }

                return(null);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }