2024-01-24 10:38:10 +01:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class AnnualReport
|
|
|
|
include DatabaseHelper
|
|
|
|
|
|
|
|
SOURCES = [
|
|
|
|
AnnualReport::Archetype,
|
|
|
|
AnnualReport::TypeDistribution,
|
|
|
|
AnnualReport::TopStatuses,
|
|
|
|
AnnualReport::MostUsedApps,
|
|
|
|
AnnualReport::CommonlyInteractedWithAccounts,
|
|
|
|
AnnualReport::TimeSeries,
|
|
|
|
AnnualReport::TopHashtags,
|
|
|
|
AnnualReport::MostRebloggedAccounts,
|
|
|
|
AnnualReport::Percentiles,
|
|
|
|
].freeze
|
|
|
|
|
|
|
|
SCHEMA = 1
|
|
|
|
|
2024-11-04 11:11:06 +01:00
|
|
|
def self.table_name_prefix
|
|
|
|
'annual_report_'
|
|
|
|
end
|
|
|
|
|
2024-01-24 10:38:10 +01:00
|
|
|
def initialize(account, year)
|
|
|
|
@account = account
|
|
|
|
@year = year
|
|
|
|
end
|
|
|
|
|
2024-11-04 11:11:06 +01:00
|
|
|
def self.prepare(year)
|
|
|
|
SOURCES.each do |klass|
|
|
|
|
klass.prepare(year)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2024-01-24 10:38:10 +01:00
|
|
|
def generate
|
|
|
|
return if GeneratedAnnualReport.exists?(account: @account, year: @year)
|
|
|
|
|
|
|
|
GeneratedAnnualReport.create(
|
|
|
|
account: @account,
|
|
|
|
year: @year,
|
|
|
|
schema_version: SCHEMA,
|
|
|
|
data: data
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def data
|
|
|
|
with_read_replica do
|
|
|
|
SOURCES.each_with_object({}) { |klass, hsh| hsh.merge!(klass.new(@account, @year).generate) }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|