public async Task <BaseModel> EditAsync(UserModelItem model, long adminId) { var response = new BaseModel(); var existingUser = await _userRepository.GetByIdAsync(model.Id); if (existingUser == null) { response.Errors.Add(ErrorConstants.ImpossibleToFindUser); return(response); } var admin = await _userRepository.GetByIdAsync(adminId); if (admin == null) { response.Errors.Add(ErrorConstants.ImpossibleToFindUser); return(response); } var adminRole = await _userRepository.GetRoleAsync(admin); var userRole = await _userRepository.GetRoleAsync(existingUser); var updatedUser = new ApplicationUser(); if (adminRole == RoleConstants.Admin) { updatedUser = UserMapper.EditEntityByAdminRole(existingUser, model); } if (adminRole == userRole) { updatedUser = UserMapper.EditEntityByUserRole(existingUser, model); } var result = await _userRepository.UpdateAsync(updatedUser); if (!result) { response.Errors.Add(ErrorConstants.ImpossibleToUpdateUser); return(response); } if (!string.IsNullOrWhiteSpace(model.NewPassword) && adminRole == userRole) { result = await _userRepository.ChangePasswordAsync(updatedUser, model.OldPassword, model.NewPassword); } if (!result) { response.Errors.Add(ErrorConstants.ImpossibleToChangeUserPassword); } return(response); }