50 lines
1.2 KiB
Ruby
50 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class AnnualReport::Archetype < AnnualReport::Source
|
|
# Average number of posts (including replies and reblogs) made by
|
|
# each active user in a single year (2023)
|
|
AVERAGE_PER_YEAR = 113
|
|
|
|
def generate
|
|
{
|
|
archetype: archetype,
|
|
}
|
|
end
|
|
|
|
private
|
|
|
|
def archetype
|
|
if (standalone_count + replies_count + reblogs_count) < AVERAGE_PER_YEAR
|
|
:lurker
|
|
elsif reblogs_count > (standalone_count * 2)
|
|
:booster
|
|
elsif polls_count > (standalone_count * 0.1) # standalone_count includes posts with polls
|
|
:pollster
|
|
elsif replies_count > (standalone_count * 2)
|
|
:replier
|
|
else
|
|
:oracle
|
|
end
|
|
end
|
|
|
|
def polls_count
|
|
@polls_count ||= base_scope.where.not(poll_id: nil).count
|
|
end
|
|
|
|
def reblogs_count
|
|
@reblogs_count ||= base_scope.where.not(reblog_of_id: nil).count
|
|
end
|
|
|
|
def replies_count
|
|
@replies_count ||= base_scope.where.not(in_reply_to_id: nil).where.not(in_reply_to_account_id: @account.id).count
|
|
end
|
|
|
|
def standalone_count
|
|
@standalone_count ||= base_scope.without_replies.without_reblogs.count
|
|
end
|
|
|
|
def base_scope
|
|
@account.statuses.where(id: year_as_snowflake_range)
|
|
end
|
|
end
|