diff --git a/app/helpers/users/digests_helper.rb b/app/helpers/users/digests_helper.rb index 13058203..1dc7d473 100644 --- a/app/helpers/users/digests_helper.rb +++ b/app/helpers/users/digests_helper.rb @@ -2,6 +2,27 @@ module Users module DigestsHelper + PROGRESS_COLORS = %w[ + progress-primary progress-secondary progress-accent + progress-info progress-success progress-warning + ].freeze + + def progress_color_for_index(index) + PROGRESS_COLORS[index % PROGRESS_COLORS.length] + end + + def city_progress_value(city_count, max_cities) + return 0 unless max_cities&.positive? + + (city_count.to_f / max_cities * 100).round + end + + def max_cities_count(toponyms) + return 0 if toponyms.blank? + + toponyms.map { |country| country['cities']&.length || 0 }.max + end + def distance_with_unit(distance_meters, unit) value = Users::Digest.convert_distance(distance_meters, unit).round "#{number_with_delimiter(value)} #{unit}" diff --git a/app/jobs/users/digests/calculating_job.rb b/app/jobs/users/digests/calculating_job.rb index aaa6c5fb..05496ac8 100644 --- a/app/jobs/users/digests/calculating_job.rb +++ b/app/jobs/users/digests/calculating_job.rb @@ -4,6 +4,7 @@ class Users::Digests::CalculatingJob < ApplicationJob queue_as :digests def perform(user_id, year) + recalculate_monthly_stats(user_id, year) Users::Digests::CalculateYear.new(user_id, year).call rescue StandardError => e create_digest_failed_notification(user_id, e) @@ -11,6 +12,12 @@ class Users::Digests::CalculatingJob < ApplicationJob private + def recalculate_monthly_stats(user_id, year) + (1..12).each do |month| + Stats::CalculateMonth.new(user_id, year, month).call + end + end + def create_digest_failed_notification(user_id, error) user = User.find(user_id) diff --git a/app/services/users/digests/calculate_year.rb b/app/services/users/digests/calculate_year.rb index 1fb33786..b835b45f 100644 --- a/app/services/users/digests/calculate_year.rb +++ b/app/services/users/digests/calculate_year.rb @@ -66,7 +66,7 @@ module Users end end - country_cities.sort_by { |country, _| country }.map do |country, cities| + country_cities.sort_by { |_country, cities| -cities.size }.map do |country, cities| { 'country' => country, 'cities' => cities.to_a.sort.map { |city| { 'city' => city } } diff --git a/app/views/users/digests/show.html.erb b/app/views/users/digests/show.html.erb index d3d28600..d61225eb 100644 --- a/app/views/users/digests/show.html.erb +++ b/app/views/users/digests/show.html.erb @@ -168,14 +168,7 @@
<% if @digest.toponyms.present? %> - <% max_cities = @digest.toponyms.map { |country| country['cities']&.length || 0 }.max %> - <% progress_colors = ['progress-primary', 'progress-secondary', 'progress-accent', 'progress-info', 'progress-success', 'progress-warning'] %> - <% @digest.toponyms.each_with_index do |country, index| %> - <% cities_count = country['cities']&.length || 0 %> - <% progress_value = max_cities&.positive? ? (cities_count.to_f / max_cities * 100).round : 0 %> - <% color_class = progress_colors[index % progress_colors.length] %> -
@@ -183,10 +176,10 @@ <%= country['country'] %> - <%= pluralize(cities_count, 'city') %> + <%= pluralize(country['cities']&.length || 0, 'city') %>
- +
<% end %> <% else %>