91 lines
5.1 KiB
PHP
91 lines
5.1 KiB
PHP
<?php
|
|
/**
|
|
* Saqel API Front Controller
|
|
* Single entry point handling routing and application bootstrap.
|
|
*/
|
|
|
|
// 1. Boot the application (autoloader, env, errors)
|
|
require_once dirname(__DIR__) . '/app/bootstrap.php';
|
|
|
|
use App\Core\Request;
|
|
use App\Core\Response;
|
|
use App\Core\Router;
|
|
|
|
// 2. Initialize request and response objects
|
|
$request = new Request();
|
|
$response = new Response();
|
|
$router = new Router();
|
|
|
|
// 3. Define Global Middleware
|
|
$router->use(\App\Middlewares\SecurityMiddleware::class);
|
|
|
|
// 4. Define Web and API Routes
|
|
|
|
// Main Platform Landing Page (Public High-Conversion Showcase)
|
|
$router->get('/', function ($request, $response) {
|
|
$response->html(\App\Views\LandingPage::render());
|
|
});
|
|
|
|
// Dedicated Institutional Proposal for Military Culture Directorate
|
|
$router->get('/military-culture', function ($request, $response) {
|
|
$response->html(\App\Views\MilitaryCulturePitch::render());
|
|
});
|
|
$router->get('/military', function ($request, $response) {
|
|
$response->html(\App\Views\MilitaryCulturePitch::render());
|
|
});
|
|
|
|
// Web Portals (HTML + Native JavaScript)
|
|
$router->get('/student', function ($request, $response) {
|
|
$response->html(\App\Views\StudentPortal::render());
|
|
});
|
|
|
|
$router->get('/teacher', function ($request, $response) {
|
|
$response->html(\App\Views\TeacherPortal::render());
|
|
});
|
|
|
|
// Health & Diagnostic Routes
|
|
$router->get('/api/health', function ($request, $response) {
|
|
$response->json([
|
|
'status' => 'success',
|
|
'message' => 'Saqel API is healthy and fast (Pure PHP)',
|
|
'app_name' => getenv('APP_NAME') ?: 'Saqel',
|
|
'time' => date('Y-m-d H:i:s')
|
|
]);
|
|
});
|
|
$router->get('/api/test/nabeh', [\App\Controllers\TestController::class, 'testNabeh']);
|
|
$router->get('/api/test/system', [\App\Controllers\TestController::class, 'testSystem']);
|
|
|
|
// OTP Authentication Routes (WhatsApp via Nabeh Gateway + Device Fingerprinting)
|
|
$router->post('/api/auth/otp/request', [\App\Controllers\AuthController::class, 'requestOtp'], [\App\Middlewares\RateLimitMiddleware::class]);
|
|
$router->post('/api/auth/otp/verify', [\App\Controllers\AuthController::class, 'verifyOtp'], [\App\Middlewares\RateLimitMiddleware::class]);
|
|
$router->post('/api/auth/logout', [\App\Controllers\AuthController::class, 'logout'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/auth/me', [\App\Controllers\AuthController::class, 'me'], [\App\Middlewares\AuthMiddleware::class]);
|
|
|
|
// Legacy / Direct Auth
|
|
$router->post('/api/auth/register', [\App\Controllers\AuthController::class, 'register'], [\App\Middlewares\RateLimitMiddleware::class]);
|
|
$router->post('/api/auth/login', [\App\Controllers\AuthController::class, 'login'], [\App\Middlewares\RateLimitMiddleware::class]);
|
|
|
|
// Teacher Studio Routes (Authenticated)
|
|
$router->get('/api/teacher/profile/status', [\App\Controllers\TeacherController::class, 'profileStatus'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->post('/api/teacher/profile/setup', [\App\Controllers\TeacherController::class, 'setupProfile'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/teacher/dashboard', [\App\Controllers\TeacherController::class, 'getDashboard'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'getCourses'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->post('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'addCourse'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->post('/api/teacher/lessons', [\App\Controllers\TeacherController::class, 'addLesson'], [\App\Middlewares\AuthMiddleware::class]);
|
|
|
|
// Student & Teacher Chat Routes (API-Driven, Authenticated)
|
|
$router->get('/api/chat/conversations', [\App\Controllers\ChatController::class, 'getConversations'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/chat/messages', [\App\Controllers\ChatController::class, 'getMessages'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->post('/api/chat/messages', [\App\Controllers\ChatController::class, 'sendMessage'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->post('/api/chat/read', [\App\Controllers\ChatController::class, 'markAsRead'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/chat/unread-count', [\App\Controllers\ChatController::class, 'getUnreadCount'], [\App\Middlewares\AuthMiddleware::class]);
|
|
|
|
// Multi-Level Exams & AI Mastery Analytics Routes (API-Driven)
|
|
$router->get('/api/exams', [\App\Controllers\ExamController::class, 'getExams'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/exams/{id}', [\App\Controllers\ExamController::class, 'getExamDetails'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->post('/api/exams/{id}/submit', [\App\Controllers\ExamController::class, 'submitExam'], [\App\Middlewares\AuthMiddleware::class]);
|
|
$router->get('/api/student/progress/mastery', [\App\Controllers\ExamController::class, 'getMastery'], [\App\Middlewares\AuthMiddleware::class]);
|
|
|
|
// 5. Dispatch the request
|
|
$router->dispatch($request, $response);
|