123456789101112131415161718192021222324252627282930313233343536373839 |
- # frozen_string_literal: true
- class AccountSuggestions::GlobalSource < AccountSuggestions::Source
- include Redisable
- def key
- :global
- end
- def get(account, skip_account_ids: [], limit: 40)
- account_ids = account_ids_for_locale(I18n.locale.to_s.split(/[_-]/).first) - [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.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i)
- end
- def to_ordered_list_key(account)
- account.id
- end
- end
|