mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
40 lines
905 B
Ruby
40 lines
905 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Stats
|
|
class BulkCalculator
|
|
def initialize(user_id)
|
|
@user_id = user_id
|
|
end
|
|
|
|
def call
|
|
months = extract_months(fetch_timestamps)
|
|
|
|
schedule_calculations(months)
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :user_id
|
|
|
|
def fetch_timestamps
|
|
last_calculated_at = Stat.where(user_id:).maximum(:updated_at)
|
|
last_calculated_at ||= DateTime.new(1970, 1, 1)
|
|
|
|
time_diff = last_calculated_at.to_i..Time.current.to_i
|
|
Point.where(user_id:, timestamp: time_diff).pluck(:timestamp).uniq
|
|
end
|
|
|
|
def extract_months(timestamps)
|
|
timestamps.group_by do |timestamp|
|
|
time = Time.zone.at(timestamp)
|
|
[time.year, time.month]
|
|
end.keys
|
|
end
|
|
|
|
def schedule_calculations(months)
|
|
months.each do |year, month|
|
|
Stats::CalculatingJob.perform_later(user_id, year, month)
|
|
end
|
|
end
|
|
end
|
|
end
|