dawarich/app/controllers/stats_controller.rb

72 lines
1.8 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2024-03-23 15:29:55 -04:00
class StatsController < ApplicationController
before_action :authenticate_user!
before_action :authenticate_active_user!, only: %i[update update_all]
2024-03-23 15:29:55 -04:00
def index
2025-07-22 13:43:27 -04:00
@stats = build_stats
assign_points_statistics
@year_distances = precompute_year_distances
2024-03-23 15:29:55 -04:00
end
2024-03-24 14:25:33 -04:00
def show
@year = params[:year].to_i
@stats = current_user.stats.where(year: @year).order(:month)
end
2024-03-24 14:25:33 -04:00
def update
if params[:month] == 'all'
(1..12).each do |month|
Stats::CalculatingJob.perform_later(current_user.id, params[:year], month)
end
target = "the whole #{params[:year]}"
else
Stats::CalculatingJob.perform_later(current_user.id, params[:year], params[:month])
target = "#{Date::MONTHNAMES[params[:month].to_i]} of #{params[:year]}"
end
redirect_to stats_path, notice: "Stats for #{target} are being updated", status: :see_other
end
def update_all
2024-12-06 10:52:36 -05:00
current_user.years_tracked.each do |year|
2024-12-16 09:10:46 -05:00
year[:months].each do |month|
Stats::CalculatingJob.perform_later(
current_user.id, year[:year], Date::ABBR_MONTHNAMES.index(month)
)
2024-12-06 10:52:36 -05:00
end
end
2024-03-24 14:25:33 -04:00
redirect_to stats_path, notice: 'Stats are being updated', status: :see_other
end
2025-07-22 13:43:27 -04:00
private
def assign_points_statistics
points_stats = ::StatsQuery.new(current_user).points_stats
@points_total = points_stats[:total]
@points_reverse_geocoded = points_stats[:geocoded]
@points_reverse_geocoded_without_data = points_stats[:without_data]
end
def precompute_year_distances
year_distances = {}
@stats.each do |year, _stats|
year_distances[year] = Stat.year_distance(year, current_user)
end
year_distances
end
def build_stats
current_user.stats.group_by(&:year).transform_values do |stats|
stats.sort_by(&:updated_at).reverse
end.sort.reverse
end
2024-03-23 15:29:55 -04:00
end