from flask import Blueprint, render_template from app.auth import login_required, get_current_user from app.db import query, query_one bp = Blueprint("dashboard", __name__) @bp.route("/") @login_required def index(): user = get_current_user() # Get latest check-in latest = query_one( "SELECT * FROM checkins WHERE user_id = %s ORDER BY checked_in_at DESC LIMIT 1", (user["id"],), ) # Get check-in count stats = query_one( "SELECT COUNT(*) as total_checkins FROM checkins WHERE user_id = %s", (user["id"],), ) # Calculate weight change first_checkin = query_one( "SELECT weight_kg FROM checkins WHERE user_id = %s ORDER BY checked_in_at ASC LIMIT 1", (user["id"],), ) weight_change = None weight_change_pct = None if latest and first_checkin: start_w = float(first_checkin["weight_kg"]) current_w = float(latest["weight_kg"]) weight_change = round(current_w - start_w, 1) if start_w > 0: weight_change_pct = round((weight_change / start_w) * 100, 1) # Recent check-ins (last 5) recent_checkins = query( "SELECT * FROM checkins WHERE user_id = %s ORDER BY checked_in_at DESC LIMIT 5", (user["id"],), ) # Activity feed (recent check-ins from all users) activity = query(""" SELECT c.*, u.display_name, u.username FROM checkins c JOIN users u ON c.user_id = u.id ORDER BY c.checked_in_at DESC LIMIT 10 """) # Milestones milestones = query( "SELECT * FROM milestones WHERE user_id = %s ORDER BY achieved_at DESC", (user["id"],), ) return render_template( "dashboard.html", user=user, latest=latest, stats=stats, weight_change=weight_change, weight_change_pct=weight_change_pct, recent_checkins=recent_checkins, activity=activity, milestones=milestones, )