Refactor stats endpoint so supports filtering people and make dashboard page utilise it

This commit is contained in:
Peter Stockings
2025-01-27 00:07:27 +11:00
parent 527395d704
commit 5ed737ee94
7 changed files with 31 additions and 36 deletions

View File

@@ -84,7 +84,7 @@ class Stats:
return stats
def fetch_stats_for_person(self, person_id, min_date=None, max_date=None, selected_exercise_ids=None):
def fetch_stats(self, selected_people_ids=None, min_date=None, max_date=None, selected_exercise_ids=None):
# Base query
query = """
SELECT
@@ -97,45 +97,35 @@ class Stats:
JOIN workout w ON t.workout_id = w.workout_id
JOIN person p ON w.person_id = p.person_id
JOIN exercise e ON t.exercise_id = e.exercise_id
WHERE p.person_id = %s
"""
# Parameters for the query
params = [person_id]
params = []
# Add optional filters
conditions = [] # Collect conditions dynamically
if selected_people_ids:
placeholders = ", ".join(["%s"] * len(selected_people_ids))
conditions.append(f"p.person_id IN ({placeholders})")
params.extend(selected_people_ids)
if min_date:
query += " AND w.start_date >= %s"
conditions.append("w.start_date >= %s")
params.append(min_date)
if max_date:
query += " AND w.start_date <= %s"
conditions.append("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})"
conditions.append(f"e.exercise_id IN ({placeholders})")
params.extend(selected_exercise_ids)
# Add conditions to the query
if conditions:
query += " WHERE " + " AND ".join(conditions)
# 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
def fetch_all_stats(self):
query = """
SELECT
t.workout_id AS "WorkoutId",
w.person_id AS "PersonId",
w.start_date AS "StartDate",
e.exercise_id AS "ExerciseId"
FROM
topset t
JOIN workout w ON t.workout_id = w.workout_id
JOIN person p ON w.person_id = p.person_id
JOIN exercise e ON t.exercise_id = e.exercise_id
"""
workouts_data = self.execute(query, [])
person_stats = self.get_stats_from_topsets(workouts_data)
return person_stats
stats = self.get_stats_from_topsets(workouts_data)
return stats