diff --git a/app/lib/annual_report/top_statuses.rb b/app/lib/annual_report/top_statuses.rb index 74b129595..f32bd09a1 100644 --- a/app/lib/annual_report/top_statuses.rb +++ b/app/lib/annual_report/top_statuses.rb @@ -2,20 +2,44 @@ class AnnualReport::TopStatuses < AnnualReport::Source def generate - top_reblogs = base_scope.order(reblogs_count: :desc).first&.id - top_favourites = base_scope.where.not(id: top_reblogs).order(favourites_count: :desc).first&.id - top_replies = base_scope.where.not(id: [top_reblogs, top_favourites]).order(replies_count: :desc).first&.id - { top_statuses: { - by_reblogs: top_reblogs&.to_s, - by_favourites: top_favourites&.to_s, - by_replies: top_replies&.to_s, + by_reblogs: status_identifier(most_reblogged_status), + by_favourites: status_identifier(most_favourited_status), + by_replies: status_identifier(most_replied_status), }, } end + private + + def status_identifier(status) + status.id.to_s if status.present? + end + + def most_reblogged_status + base_scope + .order(reblogs_count: :desc) + .first + end + + def most_favourited_status + base_scope + .excluding(most_reblogged_status) + .order(favourites_count: :desc) + .first + end + + def most_replied_status + base_scope + .excluding(most_reblogged_status, most_favourited_status) + .order(replies_count: :desc) + .first + end + def base_scope - report_statuses.public_visibility.joins(:status_stat) + report_statuses + .public_visibility + .joins(:status_stat) end end