report_filter.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # frozen_string_literal: true
  2. class ReportFilter
  3. KEYS = %i(
  4. resolved
  5. account_id
  6. target_account_id
  7. by_target_domain
  8. target_origin
  9. ).freeze
  10. attr_reader :params
  11. def initialize(params)
  12. @params = params
  13. end
  14. def results
  15. scope = Report.unresolved
  16. params.each do |key, value|
  17. scope = scope.merge scope_for(key, value), rewhere: true
  18. end
  19. scope
  20. end
  21. def scope_for(key, value)
  22. case key.to_sym
  23. when :by_target_domain
  24. Report.where(target_account: Account.where(domain: value))
  25. when :resolved
  26. Report.resolved
  27. when :account_id
  28. Report.where(account_id: value)
  29. when :target_account_id
  30. Report.where(target_account_id: value)
  31. when :target_origin
  32. target_origin_scope(value)
  33. else
  34. raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
  35. end
  36. end
  37. def target_origin_scope(value)
  38. case value.to_sym
  39. when :local
  40. Report.where(target_account: Account.local)
  41. when :remote
  42. Report.where(target_account: Account.remote)
  43. else
  44. raise Mastodon::InvalidParameterError, "Unknown value: #{value}"
  45. end
  46. end
  47. end