diff --git a/backend/routers/vitals.py b/backend/routers/vitals.py index abc5b15..07007c3 100644 --- a/backend/routers/vitals.py +++ b/backend/routers/vitals.py @@ -330,6 +330,12 @@ def get_vitals_stats( AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '30 days' THEN resting_hr END) as avg_hr_30d, AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '7 days' THEN hrv END) as avg_hrv_7d, AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '30 days' THEN hrv END) as avg_hrv_30d, + AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '7 days' THEN blood_pressure_systolic END) as avg_bp_sys_7d, + AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '30 days' THEN blood_pressure_systolic END) as avg_bp_sys_30d, + AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '7 days' THEN blood_pressure_diastolic END) as avg_bp_dia_7d, + AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '30 days' THEN blood_pressure_diastolic END) as avg_bp_dia_30d, + AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '7 days' THEN spo2 END) as avg_spo2_7d, + AVG(CASE WHEN date >= CURRENT_DATE - INTERVAL '30 days' THEN spo2 END) as avg_spo2_30d, COUNT(*) as total_entries FROM vitals_log WHERE profile_id = %s AND date >= CURRENT_DATE - INTERVAL '%s days' @@ -338,6 +344,20 @@ def get_vitals_stats( ) stats_row = cur.fetchone() + # Get latest VO2 Max + cur.execute( + """ + SELECT vo2_max + FROM vitals_log + WHERE profile_id = %s AND vo2_max IS NOT NULL + ORDER BY date DESC + LIMIT 1 + """, + (pid,) + ) + vo2_row = cur.fetchone() + latest_vo2 = vo2_row['vo2_max'] if vo2_row else None + # Get entries for trend calculation (last 14 days) cur.execute( """ @@ -388,6 +408,13 @@ def get_vitals_stats( "avg_resting_hr_30d": round(stats_row['avg_hr_30d'], 1) if stats_row['avg_hr_30d'] else None, "avg_hrv_7d": round(stats_row['avg_hrv_7d'], 1) if stats_row['avg_hrv_7d'] else None, "avg_hrv_30d": round(stats_row['avg_hrv_30d'], 1) if stats_row['avg_hrv_30d'] else None, + "avg_bp_systolic_7d": round(stats_row['avg_bp_sys_7d'], 1) if stats_row['avg_bp_sys_7d'] else None, + "avg_bp_systolic_30d": round(stats_row['avg_bp_sys_30d'], 1) if stats_row['avg_bp_sys_30d'] else None, + "avg_bp_diastolic_7d": round(stats_row['avg_bp_dia_7d'], 1) if stats_row['avg_bp_dia_7d'] else None, + "avg_bp_diastolic_30d": round(stats_row['avg_bp_dia_30d'], 1) if stats_row['avg_bp_dia_30d'] else None, + "avg_spo2_7d": round(stats_row['avg_spo2_7d'], 1) if stats_row['avg_spo2_7d'] else None, + "avg_spo2_30d": round(stats_row['avg_spo2_30d'], 1) if stats_row['avg_spo2_30d'] else None, + "latest_vo2_max": float(latest_vo2) if latest_vo2 else None, "total_entries": stats_row['total_entries'], "trend_resting_hr": trend_hr, "trend_hrv": trend_hrv,