37 lines
		
	
	
	
		
			831 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
	
		
			831 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class AccountSuggestions::GlobalSource < AccountSuggestions::Source
 | |
|   def key
 | |
|     :global
 | |
|   end
 | |
| 
 | |
|   def get(account, skip_account_ids: [], limit: 40)
 | |
|     account_ids = account_ids_for_locale(account.user_locale) - [account.id] - skip_account_ids
 | |
| 
 | |
|     as_ordered_suggestions(
 | |
|       scope(account).where(id: account_ids),
 | |
|       account_ids
 | |
|     ).take(limit)
 | |
|   end
 | |
| 
 | |
|   def remove(_account, _target_account_id)
 | |
|     nil
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def scope(account)
 | |
|     Account.searchable
 | |
|            .followable_by(account)
 | |
|            .not_excluded_by_account(account)
 | |
|            .not_domain_blocked_by_account(account)
 | |
|   end
 | |
| 
 | |
|   def account_ids_for_locale(locale)
 | |
|     Redis.current.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i)
 | |
|   end
 | |
| 
 | |
|   def to_ordered_list_key(account)
 | |
|     account.id
 | |
|   end
 | |
| end
 |