mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
52 lines
1.5 KiB
Ruby
52 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Users::DigestsController < ApplicationController
|
|
helper Users::DigestsHelper
|
|
|
|
before_action :authenticate_user!
|
|
before_action :authenticate_active_user!, only: [:create]
|
|
before_action :set_digest, only: [:show]
|
|
|
|
def index
|
|
@digests = current_user.digests.yearly.order(year: :desc)
|
|
@available_years = available_years_for_generation
|
|
end
|
|
|
|
def show
|
|
@distance_unit = current_user.safe_settings.distance_unit || 'km'
|
|
end
|
|
|
|
def create
|
|
year = params[:year].to_i
|
|
|
|
if valid_year?(year)
|
|
Users::Digests::CalculatingJob.perform_later(current_user.id, year)
|
|
redirect_to users_digests_path,
|
|
notice: "Year-end digest for #{year} is being generated. Check back soon!",
|
|
status: :see_other
|
|
else
|
|
redirect_to users_digests_path, alert: 'Invalid year selected', status: :see_other
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def set_digest
|
|
@digest = current_user.digests.yearly.find_by!(year: params[:year])
|
|
rescue ActiveRecord::RecordNotFound
|
|
redirect_to users_digests_path, alert: 'Digest not found'
|
|
end
|
|
|
|
def available_years_for_generation
|
|
tracked_years = current_user.stats.select(:year).distinct.pluck(:year)
|
|
existing_digests = current_user.digests.yearly.pluck(:year)
|
|
|
|
(tracked_years - existing_digests).sort.reverse
|
|
end
|
|
|
|
def valid_year?(year)
|
|
return false if year < 2000 || year > Time.current.year
|
|
|
|
current_user.stats.exists?(year: year)
|
|
end
|
|
end
|