コード例 #1
0
        internal override async Task <User> UpdateUser(string username, UserUpdateData updateData)
        {
            var transaction = _context.Database.BeginTransaction();

            try
            {
                IdentityUser identityUser = await _userManager.FindByNameAsync(username);

                if (null != updateData.Username)
                {
                    var result = await _userManager.SetUserNameAsync(identityUser, updateData.Username);

                    if (!result.Succeeded)
                    {
                        throw new ConduitServerException($"Failed to update username of user with username {username}");
                    }
                }
                if (null != updateData.Email)
                {
                    var result = await _userManager.SetEmailAsync(identityUser, updateData.Email);

                    if (!result.Succeeded)
                    {
                        throw new ConduitServerException($"Failed to update email of user with username {username}");
                    }
                }
                if (null != updateData.Password)
                {
                    var passwordHash = _userManager.PasswordHasher.HashPassword(identityUser, updateData.Password);
                    identityUser.PasswordHash = passwordHash;
                    var result = await _userManager.UpdateAsync(identityUser);

                    if (!result.Succeeded)
                    {
                        throw new ConduitServerException($"Failed to update password of user with username {username}");
                    }
                }
                if (null != updateData.Bio)
                {
                    _userPersonalizationRepository.UpdateUserBio(identityUser.Id, updateData.Bio);
                }
                if (null != updateData.Image)
                {
                    _userPersonalizationRepository.UpdateUserImage(identityUser.Id, updateData.Image);
                }
                _context.SaveChanges();
                transaction.Commit();
                UserPersonalizationDAO userPersonalizationDTO = _userPersonalizationRepository.GetUserPersonalization(identityUser.Id);
                return(new User(identityUser.Email, GenerateJWTToken(identityUser), identityUser.UserName, userPersonalizationDTO.Bio, userPersonalizationDTO.Image));
            } catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
        }