You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

26 lines
682 B

  1. # frozen_string_literal: true
  2. class FollowRecommendationFilter
  3. KEYS = %i(
  4. language
  5. status
  6. ).freeze
  7. attr_reader :params, :language
  8. def initialize(params)
  9. @language = params.delete('language') || I18n.locale
  10. @params = params
  11. end
  12. def results
  13. if params['status'] == 'suppressed'
  14. Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a
  15. else
  16. account_ids = Redis.current.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i)
  17. accounts = Account.where(id: account_ids).index_by(&:id)
  18. account_ids.map { |id| accounts[id] }.compact
  19. end
  20. end
  21. end