prepare("SELECT COUNT(*) FROM card_progress WHERE user_id = :uid AND last_reviewed_at IS NOT NULL"); $stmt->execute([':uid' => $user_id]); $cards_learned = (int) $stmt->fetchColumn(); $stmt = $pdo->prepare("SELECT COUNT(*) FROM card_progress WHERE user_id = :uid AND next_review <= CURRENT_DATE"); $stmt->execute([':uid' => $user_id]); $cards_due = (int) $stmt->fetchColumn(); $stmt = $pdo->prepare(" SELECT COUNT(*) FILTER (WHERE last_rating IN ('easy','medium')) AS correct, COUNT(*) AS total FROM card_progress WHERE user_id = :uid AND last_reviewed_at IS NOT NULL "); $stmt->execute([':uid' => $user_id]); $acc = $stmt->fetch(); $correct_pct = ($acc['total'] > 0) ? round(($acc['correct'] / $acc['total']) * 100) : 0; $total_cards = (int) $pdo->query("SELECT COUNT(*) FROM cards")->fetchColumn(); $stmt = $pdo->prepare("SELECT COUNT(*) FROM tutorial_progress WHERE user_id = :uid AND completed = true"); $stmt->execute([':uid' => $user_id]); $tutorials_done = (int) $stmt->fetchColumn(); $tutorials_total = (int) $pdo->query("SELECT COUNT(*) FROM tutorials")->fetchColumn(); $deck_count = (int) $pdo->query("SELECT COUNT(*) FROM decks")->fetchColumn(); $cheatsheet_count = (int) $pdo->query("SELECT COUNT(*) FROM cheatsheets")->fetchColumn(); $stmt = $pdo->prepare("SELECT score_percent FROM quiz_results WHERE user_id = :uid ORDER BY created_at DESC LIMIT 1"); $stmt->execute([':uid' => $user_id]); $last_quiz = $stmt->fetchColumn(); json_ok([ 'cards_learned' => $cards_learned, 'cards_due' => $cards_due, 'cards_total' => $total_cards, 'correct_pct' => $correct_pct, 'tutorials_done' => $tutorials_done, 'tutorials_total' => $tutorials_total, 'deck_count' => $deck_count, 'cheatsheet_count' => $cheatsheet_count, 'last_quiz_score' => $last_quiz !== false ? (int) $last_quiz : null ]);