master
 1class ChartsController < ApplicationController
 2  def index
 3    exercise = Exercise.find_by(id: params[:exercise])
 4    respond_to do |format|
 5      format.js { @training_history = user.history_for(exercise) }
 6      format.json { render json: rolled_up_sets(exercise || Exercise.primary).chart_json }
 7    end
 8
 9  end
10
11  private
12
13  def rolled_up_sets(exercise, since = (params[:since] || 1.month).to_i.seconds.ago)
14    user.exercise_sets
15      .joins(:exercise)
16      .where(exercise: exercise)
17      .where('workouts.occurred_at > ?', since.beginning_of_day)
18      .where.not(target_weight: nil)
19      .group('exercises.name')
20      .joins(:workout)
21      .group('workouts.occurred_at')
22      .maximum(:target_weight)
23  end
24
25  def user
26    User.find_by(username: params[:username]) || current_user
27  end
28end