38 lines
		
	
	
		
			831 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			38 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
 |