master
1class WorkoutsController < ApplicationController
2 before_action { @search_path = workouts_path }
3
4 def index
5 @ranges = [5.years, 1.year, 6.months, 3.months, 1.month, 2.weeks, 1.week].reverse
6 @exercise = Exercise.find_by(id: params[:exercise])
7 @primary_exercises = Exercise.primary.order_by_name.to_a
8 @workouts = recent_workouts(@exercise)
9 end
10
11 def calendar
12 respond_to do |format|
13 format.html
14 format.json do
15 workouts = current_user.workouts.recent.before(params[:end]).after(params[:start]).includes(:routine)
16 results = workouts.map do |workout|
17 {
18 title: workout.routine.name,
19 start: workout.occurred_at.strftime("%Y-%m-%d")
20 }
21 end
22 render json: results.to_json
23 end
24 end
25 end
26
27 def new
28 @routine = find_routine(params[:routine_id])
29 @all_routines = current_program.routines - [@routine]
30 @workout = current_user.next_workout_for(@routine)
31 end
32
33 def create
34 workout = current_user.workouts.build(secure_params)
35 workout.occurred_at = DateTime.now
36 workout.save!
37 redirect_to edit_workout_path(workout)
38 end
39
40 def edit
41 @workout = current_user.workouts.find(params[:id])
42 gon.workout = @workout.to_hash
43 end
44
45 private
46
47 def secure_params
48 params.require(:workout).permit(
49 :routine_id,
50 :body_weight,
51 exercise_sets_attributes: [
52 :exercise_id,
53 :target_duration,
54 :target_repetitions,
55 :target_weight,
56 :type,
57 ]
58 )
59 end
60
61 def recent_workouts(exercise, since = (params[:since] || 1.month).to_i.seconds.ago)
62 @since = since.beginning_of_day
63 workouts = current_user.workouts.since(since).recent.includes(:routine)
64 exercise ? workouts.with_exercise(exercise) : workouts
65 end
66
67 def find_routine(routine_id)
68 current_program.routines.find_by(id: routine_id) ||
69 current_user.next_routine
70 end
71
72 def current_program
73 current_user.current_program
74 end
75end