feat: add OpenAPI auto-generate dari routes - Tambah OpenAPIGenerator class untuk scan routes dan generate spec - Tambah CLI command bin/generate-openapi.php - Support auto-generate on request via OPENAPI_AUTO_GENERATE env - Update public/index.php untuk auto-generate saat request /docs/openapi.json - Tambah dokumentasi OPENAPI_AUTO_GENERATE.md
This commit is contained in:
@@ -13,6 +13,7 @@ use App\Modules\Retribusi\Dashboard\DashboardRoutes;
|
||||
use App\Modules\Retribusi\Realtime\RealtimeRoutes;
|
||||
use App\Modules\Retribusi\RetribusiRoutes;
|
||||
use App\Modules\Retribusi\Summary\SummaryRoutes;
|
||||
use App\Support\OpenAPIGenerator;
|
||||
|
||||
// Load environment variables
|
||||
AppConfig::loadEnv(__DIR__ . '/..');
|
||||
@@ -55,9 +56,29 @@ $app->get('/docs', function ($request, $response) {
|
||||
|
||||
// Serve OpenAPI JSON
|
||||
// NOTE: Saat ini PUBLIC. Jika perlu protect, tambahkan middleware
|
||||
$app->get('/docs/openapi.json', function ($request, $response) {
|
||||
$app->get('/docs/openapi.json', function ($request, $response) use ($app) {
|
||||
$openApiPath = __DIR__ . '/docs/openapi.json';
|
||||
$autoGenerate = AppConfig::get('OPENAPI_AUTO_GENERATE', 'false') === 'true';
|
||||
|
||||
// Auto-generate if enabled
|
||||
if ($autoGenerate) {
|
||||
try {
|
||||
$generator = new OpenAPIGenerator($app);
|
||||
$spec = $generator->generate();
|
||||
$json = json_encode($spec, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
|
||||
// Optionally save to file
|
||||
file_put_contents($openApiPath, $json);
|
||||
|
||||
$response->getBody()->write($json);
|
||||
return $response->withHeader('Content-Type', 'application/json');
|
||||
} catch (\Exception $e) {
|
||||
// Fallback to file if generation fails
|
||||
error_log('OpenAPI generation failed: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Load from file (default behavior)
|
||||
if (!file_exists($openApiPath)) {
|
||||
$response->getBody()->write(json_encode(['error' => 'OpenAPI spec not found']));
|
||||
return $response
|
||||
|
||||
Reference in New Issue
Block a user