fix: Phase 0b - fix blood_pressure and top_goal_name bugs
All checks were successful
Deploy Development / deploy (push) Successful in 50s
Build Test / lint-backend (push) Successful in 1s
Build Test / build-frontend (push) Successful in 14s

Final bug fixes:
1. blood_pressure_log query - changed 'date' column to 'measured_at' (correct column for TIMESTAMP)
2. top_goal_name KeyError - added 'name' to SELECT in get_active_goals()
3. top_goal_name fallback - use goal_type if name is NULL

Changes:
- scores.py: Fixed blood_pressure_log query to use measured_at instead of date
- goal_utils.py: Added 'name' column to get_active_goals() SELECT
- placeholder_resolver.py: Added fallback to goal_type if name is None

These were the last 2 errors showing in logs. All major calculation bugs should now be fixed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Lars 2026-03-28 09:32:04 +01:00
parent 02394ea19c
commit b230a03fdd
3 changed files with 4 additions and 4 deletions

View File

@ -207,8 +207,8 @@ def calculate_health_stability_score(profile_id: str) -> Optional[int]:
SELECT systolic, diastolic
FROM blood_pressure_log
WHERE profile_id = %s
AND date >= CURRENT_DATE - INTERVAL '28 days'
ORDER BY date DESC
AND measured_at >= CURRENT_DATE - INTERVAL '28 days'
ORDER BY measured_at DESC
""", (profile_id,))
bp_readings = cur.fetchall()

View File

@ -526,7 +526,7 @@ def get_active_goals(profile_id: str) -> List[Dict]:
with get_db() as conn:
cur = get_cursor(conn)
cur.execute("""
SELECT id, goal_type, target_value, target_date,
SELECT id, goal_type, name, target_value, target_date,
current_value, progress_pct, status, is_primary
FROM goals
WHERE profile_id = %s

View File

@ -595,7 +595,7 @@ def _safe_str(func_name: str, profile_id: str) -> str:
from calculations import body_metrics, nutrition_metrics, activity_metrics, scores, correlation_metrics
func_map = {
'top_goal_name': lambda pid: scores.get_top_priority_goal(pid)['name'] if scores.get_top_priority_goal(pid) else None,
'top_goal_name': lambda pid: (scores.get_top_priority_goal(pid).get('name') or scores.get_top_priority_goal(pid).get('goal_type')) if scores.get_top_priority_goal(pid) else None,
'top_goal_status': lambda pid: scores.get_top_priority_goal(pid)['status'] if scores.get_top_priority_goal(pid) else None,
'top_focus_area_name': lambda pid: scores.get_top_focus_area(pid)['label'] if scores.get_top_focus_area(pid) else None,
'recomposition_quadrant': body_metrics.calculate_recomposition_quadrant,