Make stats refresh, and add filter support to stats endpoint

This commit is contained in:
Peter Stockings
2025-01-26 23:01:39 +11:00
parent 23de6ef1f7
commit 527395d704
10 changed files with 73 additions and 65 deletions

View File

@@ -49,11 +49,13 @@ class Stats:
stats = [
{"Text": "Total Workouts", "Value": workout_count},
{"Text": "Total Sets", "Value": total_sets},
{"Text": "Total Exercises", "Value": exercise_count},
{"Text": "Average Sets Per Exercise", "Value": average_sets_per_exercise},
{"Text": "Average Exercises Per Workout", "Value": average_exercises_per_workout},
{"Text": "Average Sets Per Exercise", "Value": average_sets_per_exercise}
]
if exercise_count > 1:
stats.append({"Text": "Total Exercises", "Value": exercise_count})
stats.append({"Text": "Average Exercises Per Workout", "Value": average_exercises_per_workout})
if people_count > 1:
stats.append({"Text": "People Tracked", "Value": people_count})
@@ -82,7 +84,8 @@ class Stats:
return stats
def fetch_stats_for_person(self, person_id):
def fetch_stats_for_person(self, person_id, min_date=None, max_date=None, selected_exercise_ids=None):
# Base query
query = """
SELECT
t.workout_id AS "WorkoutId",
@@ -96,8 +99,26 @@ class Stats:
JOIN exercise e ON t.exercise_id = e.exercise_id
WHERE p.person_id = %s
"""
workouts_data = self.execute(query, [person_id])
# Parameters for the query
params = [person_id]
# Add optional filters
if min_date:
query += " AND w.start_date >= %s"
params.append(min_date)
if max_date:
query += " AND w.start_date <= %s"
params.append(max_date)
if selected_exercise_ids:
placeholders = ", ".join(["%s"] * len(selected_exercise_ids))
query += f" AND e.exercise_id IN ({placeholders})"
params.extend(selected_exercise_ids)
# Execute the query
workouts_data = self.execute(query, params)
# Generate stats from the retrieved data
person_stats = self.get_stats_from_topsets(workouts_data)
return person_stats