// Force opcache refresh - DO NOT CACHE THIS FILE declare(strict_types=1); use App\Config\Env; use App\Config\Database; use App\Routing\Router; use App\Middleware\AuthMiddleware; use App\Middleware\CorsMiddleware; use App\Controllers\AuthController; use App\Controllers\UserController; use App\Controllers\MedicalCodeController; use App\Controllers\AdminImportController; use App\Controllers\AdminMedicalCodeController; use App\Controllers\AdminContentCrudController; use App\Controllers\AdminContentController; use App\Controllers\SpecialityController; use App\Controllers\HospitalController; use App\Controllers\AdminSpecialityController; use App\Controllers\AdminHospitalController; use App\Controllers\ContentController; use App\Services\SuperAdminSeeder; // Load vendor - server structure: public_html/app.drjoekhoury.com/src/ (this file) and public_html/medcode/ (project root) // So vendor is at: ../../medcode/vendor/autoload.php from src/index.php require __DIR__ . '/../../medcode/vendor/autoload.php'; Env::load(__DIR__ . '/../../medcode/.env'); CorsMiddleware::handlePreflight(); $db = Database::getConnection(); SuperAdminSeeder::ensure($db); // DIRECT HANDLER for import-all route - bypasses Router to avoid opcache issues $requestMethod = $_SERVER['REQUEST_METHOD'] ?? 'GET'; $requestUri = $_SERVER['REQUEST_URI'] ?? '/'; $parsedUri = parse_url($requestUri, PHP_URL_PATH) ?? '/'; $normalizedUri = rtrim($parsedUri, '/') ?: '/'; // Debug: log what we're checking error_log("DIRECT HANDLER CHECK: Method=$requestMethod, URI=$requestUri, Parsed=$parsedUri, Normalized=$normalizedUri"); if ($requestMethod === 'POST' && ( $normalizedUri === '/api/admin/import-all' || $parsedUri === '/api/admin/import-all' || $parsedUri === '/api/admin/import-all/' || strpos($requestUri, '/api/admin/import-all') !== false || strpos($parsedUri, '/api/admin/import-all') !== false )) { // Direct handler - bypass Router completely error_log("DIRECT HANDLER MATCHED - calling importAll()"); error_log("DIRECT HANDLER: About to create AuthMiddleware"); try { $authMiddleware = new AuthMiddleware(); error_log("DIRECT HANDLER: AuthMiddleware created successfully"); error_log("DIRECT HANDLER: About to create AdminImportController"); $adminImportController = new AdminImportController($db, $authMiddleware); error_log("DIRECT HANDLER: AdminImportController created successfully"); error_log("DIRECT HANDLER: About to call importAll()"); $adminImportController->importAll(); error_log("DIRECT HANDLER: importAll() completed"); exit; } catch (\Throwable $e) { error_log("DIRECT HANDLER ERROR: " . $e->getMessage()); error_log("DIRECT HANDLER TRACE: " . $e->getTraceAsString()); http_response_code(500); header('Content-Type: application/json'); echo json_encode(['status' => 'error', 'message' => 'Server error: ' . $e->getMessage()]); exit; } } $router = new Router($requestMethod, $requestUri); $authMiddleware = new AuthMiddleware(); $authController = new AuthController($db, $authMiddleware); $userController = new UserController($db, $authMiddleware); $medicalCodeController = new MedicalCodeController($db, $authMiddleware); $adminImportController = new AdminImportController($db, $authMiddleware); $adminMedicalCodeController = new AdminMedicalCodeController($db, $authMiddleware); $adminContentCrudController = new AdminContentCrudController($db, $authMiddleware); $adminContentController = new AdminContentController($db, $authMiddleware); $specialityController = new SpecialityController($db); $hospitalController = new HospitalController($db); $adminSpecialityController = new AdminSpecialityController($db, $authMiddleware); $adminHospitalController = new AdminHospitalController($db, $authMiddleware); $contentController = new ContentController($db, $authMiddleware); $router->post('/api/auth/register', fn() => $authController->register()); $router->post('/api/auth/login', fn() => $authController->login()); $router->get('/api/users/me', fn() => $userController->me()); $router->put('/api/users/me', fn() => $userController->updateMe()); $router->post('/api/users/me/avatar', fn() => $userController->uploadAvatar()); $router->delete('/api/users/me', fn() => $userController->deleteMe()); $router->get('/api/medical-codes', fn() => $medicalCodeController->index()); $router->get('/api/medical-codes/{id}', fn(array $params) => $medicalCodeController->show((int)$params['id'])); // Register import-all route FIRST to ensure it's checked before other /api/admin routes // Add explicit error logging to verify route is registered // Register with multiple path variations to ensure it works $importAllHandler = function() use ($adminImportController) { error_log('=== ROUTE HANDLER CALLED FOR /api/admin/import-all ==='); error_log('REQUEST_METHOD: ' . $_SERVER['REQUEST_METHOD']); error_log('REQUEST_URI: ' . $_SERVER['REQUEST_URI']); $adminImportController->importAll(); }; $router->post('/api/admin/import-all', $importAllHandler); $router->post('/api/admin/import-all/', $importAllHandler); // With trailing slash $router->post('api/admin/import-all', $importAllHandler); // Without leading slash // Test route to verify routing works $router->post('/api/admin/test-route', function() { header('Content-Type: application/json'); echo json_encode(['status' => 'success', 'message' => 'Test route works!']); }); $router->get('/api/admin/medical-codes', fn() => $adminMedicalCodeController->index()); $router->post('/api/admin/medical-codes/import', fn() => $adminImportController->importApi()); $router->post('/api/admin/medical-codes', fn() => $adminMedicalCodeController->store()); $router->put('/api/admin/medical-codes/{id}', fn(array $params) => $adminMedicalCodeController->update((int)$params['id'])); $router->delete('/api/admin/medical-codes/{id}', fn(array $params) => $adminMedicalCodeController->delete((int)$params['id'])); $router->get('/api/admin/export/medical-codes', fn() => $adminMedicalCodeController->export()); $router->post('/api/admin/contents', fn() => $adminContentCrudController->store()); $router->put('/api/admin/contents/{id}', fn(array $params) => $adminContentCrudController->update((int)$params['id'])); $router->delete('/api/admin/contents/{id}', fn(array $params) => $adminContentCrudController->delete((int)$params['id'])); $router->get('/api/admin/export/contents', fn() => $adminContentCrudController->export()); $router->post('/api/admin/contents/import', fn() => $adminContentController->import()); $router->get('/api/contents', fn() => $contentController->index()); $router->get('/api/contents/{id}/medical-codes', fn(array $params) => $contentController->medicalCodes((int)$params['id'])); $router->get('/api/specialities', fn() => $specialityController->index()); $router->get('/api/hospitals', fn() => $hospitalController->index()); $router->post('/api/admin/specialities', fn() => $adminSpecialityController->store()); $router->put('/api/admin/specialities/{id}', fn(array $params) => $adminSpecialityController->update((int)$params['id'])); $router->delete('/api/admin/specialities/{id}', fn(array $params) => $adminSpecialityController->delete((int)$params['id'])); $router->post('/api/admin/hospitals', fn() => $adminHospitalController->store()); $router->put('/api/admin/hospitals/{id}', fn(array $params) => $adminHospitalController->update((int)$params['id'])); $router->delete('/api/admin/hospitals/{id}', fn(array $params) => $adminHospitalController->delete((int)$params['id'])); $router->dispatch();