36 lines
		
	
	
	
		
			787 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			787 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class AccountSuggestions::PastInteractionsSource < AccountSuggestions::Source
 | 
						|
  include Redisable
 | 
						|
 | 
						|
  def key
 | 
						|
    :past_interactions
 | 
						|
  end
 | 
						|
 | 
						|
  def get(account, skip_account_ids: [], limit: 40)
 | 
						|
    account_ids = account_ids_for_account(account.id, limit + skip_account_ids.size) - skip_account_ids
 | 
						|
 | 
						|
    as_ordered_suggestions(
 | 
						|
      scope.where(id: account_ids),
 | 
						|
      account_ids
 | 
						|
    ).take(limit)
 | 
						|
  end
 | 
						|
 | 
						|
  def remove(account, target_account_id)
 | 
						|
    redis.zrem("interactions:#{account.id}", target_account_id)
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def scope
 | 
						|
    Account.searchable
 | 
						|
  end
 | 
						|
 | 
						|
  def account_ids_for_account(account_id, limit)
 | 
						|
    redis.zrevrange("interactions:#{account_id}", 0, limit).map(&:to_i)
 | 
						|
  end
 | 
						|
 | 
						|
  def to_ordered_list_key(account)
 | 
						|
    account.id
 | 
						|
  end
 | 
						|
end
 |