44 lines
		
	
	
		
			901 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			901 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # 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
 | |
| 
 | |
|   def initialize(account, year)
 | |
|     @account = account
 | |
|     @year = year
 | |
|   end
 | |
| 
 | |
|   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
 |