Refactor get workout call

This commit is contained in:
Peter Stockings
2023-12-09 17:00:45 +11:00
parent 1ff616f4e0
commit c702a2ba3d
3 changed files with 41 additions and 43 deletions

12
app.py
View File

@@ -141,7 +141,7 @@ def get_workout_modal(person_id, workout_id):
(person_tags, workout_tags, selected_workout_tag_ids) = db.get_workout_tags( (person_tags, workout_tags, selected_workout_tag_ids) = db.get_workout_tags(
person_id, workout_id) person_id, workout_id)
exercises = db.get_all_exercises() exercises = db.get_all_exercises()
return render_template('partials/workout_modal.html', workout=workout, person_tags=person_tags, workout_tags=workout_tags, selected_workout_tag_ids=selected_workout_tag_ids, exercises=exercises) return render_template('partials/workout_modal.html', **workout, person_tags=person_tags, workout_tags=workout_tags, selected_workout_tag_ids=selected_workout_tag_ids, exercises=exercises)
@ app.route("/person/<int:person_id>/workout", methods=['POST']) @ app.route("/person/<int:person_id>/workout", methods=['POST'])
@@ -153,7 +153,7 @@ def create_workout(person_id):
person_id, new_workout_id) person_id, new_workout_id)
exercises = db.get_all_exercises() exercises = db.get_all_exercises()
return render_template('partials/workout_modal.html', return render_template('partials/workout_modal.html',
workout=workout, person_tags=person_tags, workout_tags=workout_tags, selected_workout_tag_ids=selected_workout_tag_ids, exercises=exercises), 200, {"HX-Trigger": "updatedPeople"} **workout, person_tags=person_tags, workout_tags=workout_tags, selected_workout_tag_ids=selected_workout_tag_ids, exercises=exercises), 200, {"HX-Trigger": "updatedPeople"}
@ app.route("/person/<int:person_id>/workout/<int:workout_id>/delete", methods=['DELETE']) @ app.route("/person/<int:person_id>/workout/<int:workout_id>/delete", methods=['DELETE'])
@@ -167,7 +167,7 @@ def delete_workout(person_id, workout_id):
@ validate_workout @ validate_workout
def get_workout_start_date_edit_form(person_id, workout_id): def get_workout_start_date_edit_form(person_id, workout_id):
workout = db.get_workout(person_id, workout_id) workout = db.get_workout(person_id, workout_id)
return render_template('partials/start_date.html', person_id=person_id, workout_id=workout_id, start_date=workout['StartDate'], is_edit=True) return render_template('partials/start_date.html', person_id=person_id, workout_id=workout_id, start_date=workout['start_date'], is_edit=True)
@ app.route("/person/<int:person_id>/workout/<int:workout_id>/start_date", methods=['PUT']) @ app.route("/person/<int:person_id>/workout/<int:workout_id>/start_date", methods=['PUT'])
@@ -182,7 +182,7 @@ def update_workout_start_date(person_id, workout_id):
@ validate_workout @ validate_workout
def get_workout_start_date(person_id, workout_id): def get_workout_start_date(person_id, workout_id):
workout = db.get_workout(person_id, workout_id) workout = db.get_workout(person_id, workout_id)
return render_template('partials/start_date.html', person_id=person_id, workout_id=workout_id, start_date=workout['StartDate']) return render_template('partials/start_date.html', person_id=person_id, workout_id=workout_id, start_date=workout['start_date'])
@ app.route("/person/<int:person_id>/workout/<int:workout_id>/topset/<int:topset_id>", methods=['GET']) @ app.route("/person/<int:person_id>/workout/<int:workout_id>/topset/<int:topset_id>", methods=['GET'])
@@ -343,7 +343,7 @@ def delete_tag(tag_id):
@ validate_workout @ validate_workout
def get_workout_note_edit_form(person_id, workout_id): def get_workout_note_edit_form(person_id, workout_id):
workout = db.get_workout(person_id, workout_id) workout = db.get_workout(person_id, workout_id)
return render_template('partials/workout_note.html', person_id=person_id, workout_id=workout_id, note=workout['Note'], is_edit=True) return render_template('partials/workout_note.html', person_id=person_id, workout_id=workout_id, note=workout['note'], is_edit=True)
@ app.route("/person/<int:person_id>/workout/<int:workout_id>/note", methods=['PUT']) @ app.route("/person/<int:person_id>/workout/<int:workout_id>/note", methods=['PUT'])
@@ -358,7 +358,7 @@ def update_workout_note(person_id, workout_id):
@ validate_workout @ validate_workout
def get_workout_note(person_id, workout_id): def get_workout_note(person_id, workout_id):
workout = db.get_workout(person_id, workout_id) workout = db.get_workout(person_id, workout_id)
return render_template('partials/workout_note.html', person_id=person_id, workout_id=workout_id, note=workout['Note']) return render_template('partials/workout_note.html', person_id=person_id, workout_id=workout_id, note=workout['note'])
@ app.route("/person/<int:person_id>/workout/<int:workout_id>/tag/add", methods=['POST']) @ app.route("/person/<int:person_id>/workout/<int:workout_id>/tag/add", methods=['POST'])

34
db.py
View File

@@ -198,16 +198,16 @@ class DataBase():
def get_workout(self, person_id, workout_id): def get_workout(self, person_id, workout_id):
topsets = self.execute(""" topsets = self.execute("""
SELECT SELECT
P.person_id AS "PersonId", P.person_id,
P.name AS "PersonName", P.name AS "person_name",
W.workout_id AS "WorkoutId", W.workout_id,
W.start_date AS "StartDate", W.start_date,
T.topset_id AS "TopSetId", T.topset_id,
E.exercise_id AS "ExerciseId", E.exercise_id,
E.name AS "ExerciseName", E.name AS "exercise_name",
T.repetitions AS "Repetitions", T.repetitions,
T.weight AS "Weight", T.weight,
W.note AS "Note" W.note
FROM Person P FROM Person P
LEFT JOIN Workout W ON P.person_id=W.person_id LEFT JOIN Workout W ON P.person_id=W.person_id
LEFT JOIN TopSet T ON W.workout_id=T.workout_id LEFT JOIN TopSet T ON W.workout_id=T.workout_id
@@ -216,15 +216,13 @@ class DataBase():
AND W.workout_id = %s AND W.workout_id = %s
ORDER BY T.topset_id""", [person_id, workout_id]) ORDER BY T.topset_id""", [person_id, workout_id])
note = next((t['Note'] for t in topsets), '')
return { return {
'PersonId': person_id, 'person_id': person_id,
'PersonName': next((t['PersonName'] for t in topsets), 'Unknown'), 'person_name': topsets[0]['person_name'],
'WorkoutId': workout_id, 'workout_id': workout_id,
'StartDate': topsets[0]['StartDate'], 'start_date': topsets[0]['start_date'],
'TopSets': [{"TopSetId": t['TopSetId'], "ExerciseId": t['ExerciseId'], "ExerciseName": t['ExerciseName'], "Weight": t['Weight'], "Repetitions": t['Repetitions']} for t in topsets if t['TopSetId'] is not None], 'top_sets': [{"topset_id": t['topset_id'], "exercise_id": t['exercise_id'], "exercise_name": t['exercise_name'], "weight": t['weight'], "repetitions": t['repetitions']} for t in topsets if t['topset_id'] is not None],
'Note': note 'note': topsets[0]['note']
} }
def get_topset(self, topset_id): def get_topset(self, topset_id):

View File

@@ -19,10 +19,10 @@
<div class="flex flex-col w-full"> <div class="flex flex-col w-full">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="w-full"> <div class="w-full">
<h3 class="text-xl font-bold text-gray-900">{{ workout['PersonName'] }}</h3> <h3 class="text-xl font-bold text-gray-900">{{ person_name }}</h3>
{{ render_partial('partials/workout_tags.html', person_id=workout['PersonId'], {{ render_partial('partials/workout_tags.html', person_id=person_id,
workout_id=workout['WorkoutId'], workout_id=workout_id,
person_tags=person_tags, workout_tags=workout_tags, person_tags=person_tags, workout_tags=workout_tags,
selected_workout_tag_ids=selected_workout_tag_ids) }} selected_workout_tag_ids=selected_workout_tag_ids) }}
@@ -30,14 +30,14 @@
</div> </div>
<div class="grid grid-cols-1 lg:grid-cols-2"> <div class="grid grid-cols-1 lg:grid-cols-2">
{{ render_partial('partials/start_date.html', person_id=workout['PersonId'], {{ render_partial('partials/start_date.html', person_id=person_id,
workout_id=workout['WorkoutId'], workout_id=workout_id,
start_date=workout['StartDate']) }} start_date=start_date) }}
{{ render_partial('partials/workout_note.html', person_id=workout['PersonId'], {{ render_partial('partials/workout_note.html', person_id=person_id,
workout_id=workout['WorkoutId'], workout_id=workout_id,
note=workout['Note']) }} note=note) }}
</div> </div>
@@ -76,17 +76,17 @@
</thead> </thead>
<tbody class="divide-y divide-gray-100" id="new-workout" hx-target="closest tr" <tbody class="divide-y divide-gray-100" id="new-workout" hx-target="closest tr"
hx-swap="outerHTML swap:0.5s"> hx-swap="outerHTML swap:0.5s">
{% for t in workout['TopSets'] %} {% for topset in top_sets %}
{{ render_partial('partials/topset.html', person_id=workout['PersonId'], {{ render_partial('partials/topset.html', person_id=person_id,
workout_id=workout['WorkoutId'], workout_id=workout_id,
topset_id=t['TopSetId'], exercise_id=t['ExerciseId'] ,exercise_name=t['ExerciseName'], topset_id=topset.topset_id, exercise_id=topset.exercise_id, exercise_name=topset.exercise_name,
repetitions=t['Repetitions'], repetitions=topset.repetitions,
weight=t['Weight']) }} weight=topset.weight) }}
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% if workout['TopSets']|length == 0 %} {% if top_sets|length == 0 %}
<div class="bg-purple-100 rounded-lg py-5 px-6 mb-4 text-base text-purple-700 mb-3" role="alert" <div class="bg-purple-100 rounded-lg py-5 px-6 mb-4 text-base text-purple-700 mb-3" role="alert"
id="no-workouts"> id="no-workouts">
No topsets found. No topsets found.
@@ -95,12 +95,12 @@
</div> </div>
<!-- Modal footer --> <!-- Modal footer -->
<div class="flex items-center p-3 md:p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600"> <div class="flex items-center p-3 md:p-6 space-x-2 border-t border-gray-200 rounded-b dark:border-gray-600">
{{ render_partial('partials/new_set_form.html', person_id=workout['PersonId'], {{ render_partial('partials/new_set_form.html', person_id=person_id,
workout_id=workout['WorkoutId'], workout_id=workout_id,
exercises=exercises, exercises=exercises,
has_value=False) }} has_value=False) }}
</div> </div>
<div id="exercise-progress-{{ workout['PersonId'] }}" class="mx-0 md:mx-5"> <div id="exercise-progress-{{ person_id }}" class="mx-0 md:mx-5">
</div> </div>
</div> </div>