33 lines
958 B
PHP
33 lines
958 B
PHP
<?php
|
|
|
|
namespace Api\Controllers;
|
|
|
|
use Api\Core\Controller;
|
|
use Api\Core\Response;
|
|
use Api\Core\Auth;
|
|
|
|
class LeaderboardController extends Controller {
|
|
public function index() {
|
|
$user = Auth::getUser();
|
|
if (!$user) return Response::error('Unauthorized', 401);
|
|
|
|
$db = db();
|
|
$schoolId = $user['school_id'];
|
|
|
|
// Get learners with their average marks
|
|
$sql = "SELECT l.id, l.full_name, AVG(m.marks_obtained / a.total_marks * 100) as average_percent
|
|
FROM learners l
|
|
JOIN marks m ON l.id = m.learner_id
|
|
JOIN assessments a ON m.assessment_id = a.id
|
|
WHERE l.school_id = :school_id
|
|
GROUP BY l.id
|
|
ORDER BY average_percent DESC";
|
|
|
|
$stmt = $db->prepare($sql);
|
|
$stmt->execute(['school_id' => $schoolId]);
|
|
$leaderboard = $stmt->fetchAll();
|
|
|
|
Response::json($leaderboard);
|
|
}
|
|
}
|