Add 'Machine vs Free Weight' & 'Compound vs Isolation' breakdowns for workouts

This commit is contained in:
Peter Stockings
2026-01-31 13:11:21 +11:00
parent 8b276804b9
commit 9e20976591
5 changed files with 46 additions and 27 deletions

View File

@@ -78,18 +78,19 @@ class Exercises:
return self.get_exercise(exercise_id)
def get_workout_muscle_group_distribution(self, workout_id):
def get_workout_attribute_distribution(self, workout_id, category_name):
query = """
SELECT attr.name as muscle_group, COUNT(*) as count
SELECT attr.name as attribute_name, COUNT(*) as count
FROM topset t
JOIN exercise_to_attribute eta ON t.exercise_id = eta.exercise_id
JOIN exercise e ON t.exercise_id = e.exercise_id
JOIN exercise_to_attribute eta ON e.exercise_id = eta.exercise_id
JOIN exercise_attribute attr ON eta.attribute_id = attr.attribute_id
JOIN exercise_attribute_category cat ON attr.category_id = cat.category_id
WHERE t.workout_id = %s AND cat.name = 'Muscle Group'
WHERE t.workout_id = %s AND cat.name = %s
GROUP BY attr.name
ORDER BY count DESC
"""
distribution = self.execute(query, [workout_id])
distribution = self.execute(query, [workout_id, category_name])
# Calculate percentages and SVG parameters
total_counts = sum(item['count'] for item in distribution)
@@ -105,6 +106,8 @@ class Exercises:
"#10b981", # emerald-500
"#6366f1", # indigo-500
"#f43f5e", # rose-500
"#84cc16", # lime-500
"#0ea5e9", # sky-500
]
if total_counts > 0: