From 0cce988f119b80fd69b9a415c9e9b983325a12af Mon Sep 17 00:00:00 2001 From: stilbruch Date: Mon, 9 May 2022 00:25:31 -0500 Subject: Improve history page --- app/routes/workout.py | 36 +++++++++++++++++++++++++------ app/tables/workout.py | 7 +++++++ app/templates/home.html | 2 +- app/templates/workout/history.html | 43 +++++++++++++++++++++----------------- 4 files changed, 62 insertions(+), 26 deletions(-) diff --git a/app/routes/workout.py b/app/routes/workout.py index 8f58aa3..767603e 100644 --- a/app/routes/workout.py +++ b/app/routes/workout.py @@ -144,11 +144,35 @@ def workout_record(workout_id=None): @app.route("/workout/history/") @login_required def workout_history(record_id=None): - record = WorkoutRecord.query.filter_by( - id=int(record_id), user_id=current_user.id - ).first() - - if not record: + query = ( + db.session.query(SetRecord) + .join(WorkoutRecord) + .filter( + WorkoutRecord.id == SetRecord.workout_record_id, + WorkoutRecord.user_id == current_user.id, + WorkoutRecord.id == record_id, + ) + .order_by(SetRecord.exercise_id) + .all() + ) + if not query: return redirect(url_for("home")) - return render_template("workout/history.html", record=record) + # Condense into format we want + # TODO: this should be handled by an ExerciseRecord class, but I don't have time for it + exercises = {} + for set in query: + if set.exercise_id in exercises: + exercises[set.exercise_id]["sets"].append(set) + else: + exercises[set.exercise_id] = { + "sets": [set], + "name": set.exercise.name, + "id": int(set.exercise.id), + } + + return render_template( + "workout/history.html", + exercises=exercises.values(), + workout_record=query[0].workout_record, + ) diff --git a/app/tables/workout.py b/app/tables/workout.py index bdb200e..ff9208c 100644 --- a/app/tables/workout.py +++ b/app/tables/workout.py @@ -75,6 +75,10 @@ class SetRecord(db.Model): # relationships exercise = db.relationship("Exercise") + # Calculates using https://www.athlegan.com/calculate-1rm + def one_rep_max(self): + return int(self.lbs / (1.0278 - (0.0278 * self.reps))) + # Represents a recording of a workout class WorkoutRecord(db.Model): @@ -95,3 +99,6 @@ class WorkoutRecord(db.Model): self.workout = workout self.finished = finished self.user = current_user + + def finished_nice(self, fmt="%m/%d/%y %-I:%M %p"): + return self.finished.strftime(fmt) diff --git a/app/templates/home.html b/app/templates/home.html index 243f76d..07d6269 100644 --- a/app/templates/home.html +++ b/app/templates/home.html @@ -109,7 +109,7 @@ {% for record in records %} {{ record.workout.name }} - {{ record.finished.strftime("%m/%d/%y %-I:%M %p") }} + {{ record.finished_nice() }} View {% endfor %} diff --git a/app/templates/workout/history.html b/app/templates/workout/history.html index de199a1..e8f2bc5 100644 --- a/app/templates/workout/history.html +++ b/app/templates/workout/history.html @@ -1,29 +1,34 @@ {% extends 'base/layout.html' %} -{% block title %}Workout{% endblock %} - {% block content %}
-

Workout

+

{{ workout_record.workout.name }}

+

{{ workout_record.finished_nice() }}

- - - - - - - - {% for set in record.sets %} - - - - - - {% endfor %} - -
SetlbsReps
{{ set.lbs }}{{ set.reps }}
+ {% for exercise in exercises %} + View Progress +

{{ exercise.name }}

+ + + + + + + + + {% for set in exercise.sets %} + + + + + + + {% endfor %} + +
SetlbsReps1RM
{{ loop.index0 + 1 }}{{ set.lbs }}{{ set.reps }}{{ set.one_rep_max() }}
+ {% endfor %}
-- cgit v1.2.3