Collections/public/index.php

60 lines
2.4 KiB
PHP

<?php
$autoloadPath = __DIR__ . '/../vendor/autoload.php';
if (!file_exists($autoloadPath)) {
http_response_code(500);
die("FATAL ERROR: Composer autoloader not found. Please run 'composer install' in the project root.");
}
require $autoloadPath;
require __DIR__ . '/../config.php';
use App\Router;
use App\Controllers\ItemController;
use App\Controllers\CategoryController;
use App\Database;
// Initialize Database (ensures tables exist)
Database::getInstance();
$router = new Router();
// --- Language Switch Route ---
$router->addRoute('GET', '/lang/{locale}', function ($locale) {
if (in_array($locale, SUPPORTED_LOCALES)) {
$_SESSION['locale'] = $locale;
}
// Redirect back to the page the user came from, or home
$referer = $_SERVER['HTTP_REFERER'] ?? '/';
header("Location: " . $referer);
exit;
});
// --- Web Routes (Full Page/Initial Load) ---
$router->addRoute('GET', '/', [ItemController::class, 'overview']);
$router->addRoute('GET', '/categories', [CategoryController::class, 'index']);
$router->addRoute('GET', '/parts', [ItemController::class, 'addForm']);
$router->addRoute('GET', '/print/{id:\d+}', [ItemController::class, 'printQR']);
// --- API Routes (AJAX Content) ---
// These routes return only the Twig block content, not the full layout.
$router->addRoute('GET', '/api/items', [ItemController::class, 'listItems']);
$router->addRoute('GET', '/api/items/{id:\d+}', [ItemController::class, 'getItem']);
$router->addRoute('GET', '/api/categories', [CategoryController::class, 'listCategories']);
$router->addRoute('GET', '/api/categories/list', [CategoryController::class, 'listCategoriesJson']);
$router->addRoute('GET', '/api/categories/{id}', [CategoryController::class, 'getCategory']);
$router->addRoute('GET', '/api/parts', [ItemController::class, 'renderAddForm']);
// --- API CRUD Routes ---
// Items
$router->addRoute('POST', '/api/items', [ItemController::class, 'create']);
$router->addRoute('POST', '/api/items/{id:\d+}', [ItemController::class, 'update']);
$router->addRoute('DELETE', '/api/items/{id:\d+}', [ItemController::class, 'delete']);
// Categories
$router->addRoute('POST', '/api/categories', [CategoryController::class, 'create']);
$router->addRoute('PUT', '/api/categories/{id:\d+}', [CategoryController::class, 'update']);
$router->addRoute('DELETE', '/api/categories/{id:\d+}', [CategoryController::class, 'delete']);
$router->dispatch();