Update: 2026-05-03 17:32:57

This commit is contained in:
Hamza-Ayed
2026-05-03 17:32:57 +03:00
parent 6a3e66ad49
commit 4b40b1185f
102 changed files with 525 additions and 11371 deletions

View File

@@ -1,152 +1,36 @@
<?php
/**
* Simple Router & Entry Point
*/
declare(strict_types=1);
require_once __DIR__ . '/../app/bootstrap/init.php';
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../app/Core/helpers.php';
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$route = $_GET['route'] ?? str_replace('/api/', '', $uri);
$route = trim($route, '/');
use App\Core\Application;
use App\Modules\Auth\AuthController;
use App\Modules\Companies\CompanyController;
use App\Modules\Invoices\InvoiceController;
use App\Modules\Dashboard\DashboardController;
use App\Modules\Users\UsersController;
use App\Modules\ApiKeys\ApiKeyController;
use App\Modules\Admin\AdminController;
use App\Middleware\AuthMiddleware;
use App\Middleware\HmacMiddleware;
// Mapping routes to modules
$routes = [
'auth/login' => 'auth/login.php',
'auth/refresh' => 'auth/refresh.php',
'auth/logout' => 'auth/logout.php',
'users' => 'users/index.php',
'trips' => 'trips/index.php',
];
$app = new Application(dirname(__DIR__));
$router = $app->getRouter();
// ══ Auth Routes ══════════════════════════════════════════════
$router->addRoute('POST', '/api/v1/auth/login', [AuthController::class, 'login']);
$router->addRoute('POST', '/api/v1/auth/register', [AuthController::class, 'register']);
$router->addRoute('POST', '/api/v1/auth/refresh', [AuthController::class, 'refresh']);
$router->addRoute('POST', '/api/v1/auth/logout', [AuthController::class, 'logout']);
$router->addRoute('GET', '/api/v1/auth/me', [
'middleware' => [AuthMiddleware::class],
'handler' => [AuthController::class, 'me']
]);
$router->addRoute('POST', '/api/v1/auth/2fa/enable', [
'middleware' => [AuthMiddleware::class],
'handler' => [AuthController::class, 'enable2FA']
]);
$router->addRoute('POST', '/api/v1/auth/2fa/verify', [
'middleware' => [AuthMiddleware::class],
'handler' => [AuthController::class, 'verify2FA']
]);
$router->addRoute('POST', '/api/v1/auth/2fa/disable', [
'middleware' => [AuthMiddleware::class],
'handler' => [AuthController::class, 'disable2FA']
]);
// ══ Company Routes ═══════════════════════════════════════════
$router->addRoute('GET', '/api/v1/companies', [
'middleware' => [AuthMiddleware::class],
'handler' => [CompanyController::class, 'index']
]);
$router->addRoute('POST', '/api/v1/companies', [
'middleware' => [AuthMiddleware::class],
'handler' => [CompanyController::class, 'store']
]);
$router->addRoute('GET', '/api/v1/companies/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [CompanyController::class, 'show']
]);
$router->addRoute('PUT', '/api/v1/companies/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [CompanyController::class, 'update']
]);
$router->addRoute('DELETE', '/api/v1/companies/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [CompanyController::class, 'destroy']
]);
// ══ User Routes ══════════════════════════════════════════════
$router->addRoute('GET', '/api/v1/users', [
'middleware' => [AuthMiddleware::class],
'handler' => [UsersController::class, 'list']
]);
$router->addRoute('POST', '/api/v1/users', [
'middleware' => [AuthMiddleware::class],
'handler' => [UsersController::class, 'create']
]);
$router->addRoute('PUT', '/api/v1/users/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [UsersController::class, 'update']
]);
$router->addRoute('DELETE', '/api/v1/users/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [UsersController::class, 'destroy']
]);
// ══ Invoice Routes ═══════════════════════════════════════════
$router->addRoute('GET', '/api/v1/invoices', [
'middleware' => [AuthMiddleware::class],
'handler' => [InvoiceController::class, 'index']
]);
$router->addRoute('POST', '/api/v1/invoices/upload', [
'middleware' => [AuthMiddleware::class],
'handler' => [InvoiceController::class, 'upload']
]);
$router->addRoute('GET', '/api/v1/invoices/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [InvoiceController::class, 'show']
]);
$router->addRoute('GET', '/api/v1/invoices/{id}/status', [
'middleware' => [AuthMiddleware::class],
'handler' => [InvoiceController::class, 'status']
]);
$router->addRoute('GET', '/api/v1/invoices/{id}/file', [
'middleware' => [AuthMiddleware::class],
'handler' => [InvoiceController::class, 'serveFile']
]);
// ══ Dashboard ════════════════════════════════════════════════
$router->addRoute('GET', '/api/v1/dashboard', [
'middleware' => [AuthMiddleware::class],
'handler' => [DashboardController::class, 'getStats']
]);
// ══ API Keys ═══════════════════════════════════════════════════
$router->addRoute('GET', '/api/v1/api-keys', [
'middleware' => [AuthMiddleware::class],
'handler' => [ApiKeyController::class, 'index']
]);
$router->addRoute('POST', '/api/v1/api-keys', [
'middleware' => [AuthMiddleware::class],
'handler' => [ApiKeyController::class, 'create']
]);
$router->addRoute('DELETE', '/api/v1/api-keys/{id}', [
'middleware' => [AuthMiddleware::class],
'handler' => [ApiKeyController::class, 'revoke']
]);
// ══ Admin Routes (Super Admin) ════════════════════════════════
$router->addRoute('GET', '/api/v1/admin/tenants', [
'middleware' => [AuthMiddleware::class],
'handler' => [AdminController::class, 'listTenants']
]);
$router->addRoute('GET', '/api/v1/admin/stats', [
'middleware' => [AuthMiddleware::class],
'handler' => [AdminController::class, 'getSystemStats']
]);
$router->addRoute('GET', '/api/v1/admin/queue', [
'middleware' => [AuthMiddleware::class],
'handler' => [AdminController::class, 'getQueueStatus']
]);
// ══ Health & Public ═══════════════════════════════════════════
$router->addRoute('GET', '/api/v1/health', [AdminController::class, 'health']);
// ══ Determine if this is an API request ═════════════════════════════
$apiRoute = $_GET['route'] ?? null;
if (!$apiRoute) {
// Not an API call — serve the SPA shell
include __DIR__ . '/shell.php';
exit;
if (isset($routes[$route])) {
$file = APP_PATH . '/modules_app/' . $routes[$route];
if (file_exists($file)) {
require_once $file;
} else {
json_error("Endpoint file missing: {$route}", 500);
}
} else {
// If no route matches, maybe it's a SPA request or 404
if (str_starts_with($route, 'v1/')) {
json_error("Not Found: {$route}", 404);
} else {
// Fallback for non-API requests (Frontend)
echo "<h1>Musadaq API - Pure PHP</h1><p>Running on simple architecture.</p>";
}
}
$app->run();