feat: initial foundation for collaborative canteen ordering system in vanilla PHP
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
// Handle PHP built-in web server static files directly
|
||||
if (php_sapi_name() === 'cli-server') {
|
||||
$path = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
|
||||
$file = __DIR__ . $path;
|
||||
if ($path !== '/' && file_exists($file) && !is_dir($file)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Error reporting settings
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', '1');
|
||||
|
||||
// Register Autoloader & Global Helpers
|
||||
require_once __DIR__ . '/../app/Core/Autoloader.php';
|
||||
require_once __DIR__ . '/../app/Core/Helpers.php';
|
||||
\App\Core\Autoloader::register();
|
||||
\App\Core\Autoloader::addNamespace('App', __DIR__ . '/../app');
|
||||
|
||||
// Load environment configuration
|
||||
\App\Core\Config::load(__DIR__ . '/../.env');
|
||||
|
||||
// Initialize Database Schema & Seed Data
|
||||
\App\Core\Database\Database::initSchema();
|
||||
|
||||
// Initialize Request, Response, and Router
|
||||
$request = new \App\Core\Http\Request();
|
||||
$response = new \App\Core\Http\Response();
|
||||
$router = new \App\Core\Routing\Router();
|
||||
|
||||
// Define Routes
|
||||
// Authentication
|
||||
$router->get('/login', [\App\Controllers\AuthController::class, 'loginForm']);
|
||||
$router->post('/login', [\App\Controllers\AuthController::class, 'login']);
|
||||
$router->post('/quick-login', [\App\Controllers\AuthController::class, 'quickLogin']);
|
||||
$router->get('/register', [\App\Controllers\AuthController::class, 'registerForm']);
|
||||
$router->post('/register', [\App\Controllers\AuthController::class, 'register']);
|
||||
$router->post('/logout', [\App\Controllers\AuthController::class, 'logout']);
|
||||
|
||||
// Daily Food & Canteen Sessions
|
||||
$router->get('/', [\App\Controllers\SessionController::class, 'index']);
|
||||
$router->get('/sessions/create', [\App\Controllers\SessionController::class, 'createForm']);
|
||||
$router->post('/sessions', [\App\Controllers\SessionController::class, 'store']);
|
||||
$router->get('/sessions/history', [\App\Controllers\SessionController::class, 'history']);
|
||||
$router->get('/sessions/{id}', [\App\Controllers\SessionController::class, 'show']);
|
||||
$router->post('/sessions/{id}/status', [\App\Controllers\SessionController::class, 'updateStatus']);
|
||||
$router->post('/sessions/{id}/add-menu', [\App\Controllers\SessionController::class, 'addMenu']);
|
||||
$router->post('/sessions/{id}/delete-menu', [\App\Controllers\SessionController::class, 'deleteMenu']);
|
||||
$router->post('/sessions/{id}/settle-prices', [\App\Controllers\SessionController::class, 'settlePrices']);
|
||||
|
||||
// Employee Self-Orders
|
||||
$router->post('/employee-orders', [\App\Controllers\EmployeeOrderController::class, 'store']);
|
||||
$router->post('/employee-orders/{id}/toggle-paid', [\App\Controllers\EmployeeOrderController::class, 'togglePaid']);
|
||||
$router->post('/employee-orders/{id}/delete', [\App\Controllers\EmployeeOrderController::class, 'delete']);
|
||||
|
||||
// Coworkers & Balances
|
||||
$router->get('/employees', [\App\Controllers\EmployeeController::class, 'index']);
|
||||
|
||||
// 404 Fallback
|
||||
$router->setNotFound(function ($req, $res) {
|
||||
return $res->setStatusCode(404)->setContent(
|
||||
'<div style="text-align:center; padding: 4rem; font-family: sans-serif;">
|
||||
<h1>404 - Page Not Found</h1>
|
||||
<p>The page or food session you requested does not exist.</p>
|
||||
<p><a href="/" style="color: #4f46e5; text-decoration: none; font-weight: 600;">← Back to Food Sessions</a></p>
|
||||
</div>'
|
||||
);
|
||||
});
|
||||
|
||||
// Dispatch and send response
|
||||
$result = $router->dispatch($request, $response);
|
||||
$result->send();
|
||||
Reference in New Issue
Block a user