1 # frozen_string_literal: true
4 class HeatmapsController < ApplicationController
7 before_action :authorize_web
8 before_action :set_locale
9 before_action :check_database_readable
11 authorize_resource :user
14 @user = User.find_by(:display_name => params[:user_display_name])
16 if @user && (@user.visible? || current_user&.administrator?)
17 @heatmap_data = Rails.cache.fetch("heatmap_data_of_user_#{@user.id}", :expires_at => Time.zone.now.end_of_day) do
18 from = 1.year.ago.beginning_of_day
19 to = Time.zone.now.end_of_day
22 .where(:user_id => @user.id)
23 .where(:created_at => from..to)
24 .where(:num_changes => 1..)
25 .group("date_trunc('day', created_at)")
26 .select("date_trunc('day', created_at) AS date, SUM(num_changes) AS total_changes, MAX(id) AS max_id")
30 :date => changeset.date.to_date,
31 :total_changes => changeset.total_changes.to_i,
32 :max_id => changeset.max_id
37 :count => mapped.sum { |entry| entry[:total_changes] },
38 :data => mapped.index_by { |entry| entry[:date] },