Files
saqel/backend/public/index.php
T

68 lines
2.7 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
// Root Redirect to Student Portal
$router->get('/', function ($request, $response) {
header('Location: /student');
exit;
});
// Web Portals (HTML + Alpine.js)
$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
$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]);
// 5. Dispatch the request
$router->dispatch($request, $response);