Add person graphs endpoint for workouts per week & PRs per week, consumed via dashboard, person overview and notes

This commit is contained in:
Peter Stockings
2025-01-27 01:00:50 +11:00
parent 049af675cc
commit 0ed0c20e93
9 changed files with 224 additions and 152 deletions

12
db.py
View File

@@ -1,6 +1,5 @@
import os
import psycopg2
import numpy as np
from psycopg2.extras import RealDictCursor
from datetime import datetime
from dateutil.relativedelta import relativedelta
@@ -9,11 +8,12 @@ from flask import g
import pandas as pd
from features.calendar import Calendar
from features.exercises import Exercises
from features.people_graphs import PeopleGraphs
from features.person_overview import PersonOverview
from features.stats import Stats
from features.workout import Workout
from features.sql_explorer import SQLExplorer
from utils import count_prs_over_time, get_all_exercises_from_topsets, get_exercise_graph_model, get_topsets_for_person, get_weekly_pr_graph_model, get_workout_counts, get_workouts
from utils import get_all_exercises_from_topsets, get_exercise_graph_model, get_topsets_for_person, get_workouts
class DataBase():
@@ -24,6 +24,7 @@ class DataBase():
self.exercises = Exercises(self.execute)
self.sql_explorer = SQLExplorer(self.execute)
self.person_overview = PersonOverview(self.execute)
self.people_graphs = PeopleGraphs(self.execute)
db_url = urlparse(os.environ['DATABASE_URL'])
# if db_url is null then throw error
if not db_url:
@@ -207,17 +208,12 @@ class DataBase():
LEFT JOIN Exercise E ON T.exercise_id=E.exercise_id
WHERE P.person_id=%s""", [person_id])
weekly_counts = get_workout_counts(topsets, 'week')
weekly_pr_counts = count_prs_over_time(topsets, 'week')
person_graphs = [get_weekly_pr_graph_model('Workouts per week', weekly_counts), get_weekly_pr_graph_model('PRs per week', weekly_pr_counts)]
return {
'PersonId': next((t['PersonId'] for t in topsets), -1),
'PersonName': next((t['PersonName'] for t in topsets), 'Unknown'),
'Exercises': get_all_exercises_from_topsets(topsets),
'Workouts': get_workouts(topsets),
'ExerciseProgressGraphs': get_topsets_for_person(topsets),
'PersonGraphs': person_graphs
'ExerciseProgressGraphs': get_topsets_for_person(topsets)
}
def get_workout(self, person_id, workout_id):