feat: add app and database modules
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ============================================================
|
||||
*
|
||||
* @project biiproject
|
||||
*
|
||||
* @author Andika Debi Putra
|
||||
*
|
||||
* @email andikadebiputra@gmail.com
|
||||
*
|
||||
* @website https://biiproject.com
|
||||
*
|
||||
* @copyright Copyright (c) 2026 Andika Debi Putra
|
||||
* @license Proprietary - All Rights Reserved
|
||||
*
|
||||
* @version 1.0.0
|
||||
*
|
||||
* @created 2026-05-01
|
||||
* ============================================================
|
||||
*/
|
||||
|
||||
namespace App\Console\Commands\AI;
|
||||
|
||||
use App\Services\AI\AiService;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
class GenerateSwaggerAnnotations extends Command
|
||||
{
|
||||
/**
|
||||
* The name and signature of the console command.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $signature = 'ai:swagger {controller : The path to the controller file}';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Generate Swagger/OpenAPI annotations for a controller using AI';
|
||||
|
||||
public function __construct(
|
||||
protected AiService $aiService
|
||||
) {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
public function handle()
|
||||
{
|
||||
$path = $this->argument('controller');
|
||||
|
||||
if (! File::exists($path)) {
|
||||
// Try to find it in app/Http/Controllers
|
||||
$fullPath = app_path('Http/Controllers/'.ltrim($path, '/'));
|
||||
if (! File::exists($fullPath)) {
|
||||
$this->error("Controller not found at: {$path}");
|
||||
|
||||
return 1;
|
||||
}
|
||||
$path = $fullPath;
|
||||
}
|
||||
|
||||
$content = File::get($path);
|
||||
|
||||
$this->info('Analyzing controller: '.basename($path));
|
||||
|
||||
$prompt = "Generate PHP Swagger (L5-Swagger) annotations for the following Laravel controller.
|
||||
Focus on @OA\Get, @OA\Post, etc. with proper @OA\Response and @OA\Parameter.
|
||||
|
||||
Guidelines:
|
||||
- Use modern OpenAPI 3.0 standards.
|
||||
- Include common responses like 200, 401, 403, and 500.
|
||||
- Identify request parameters from the code.
|
||||
- OUTPUT ONLY THE PHP CODE FOR THE ANNOTATIONS, no extra explanation.
|
||||
|
||||
CONTROLLER CODE:
|
||||
{$content}";
|
||||
|
||||
$result = $this->aiService->provider()->generate($prompt);
|
||||
|
||||
if (isset($result['success']) && $result['success']) {
|
||||
$annotations = $result['response'];
|
||||
|
||||
$this->warn('AI Generated Annotations:');
|
||||
$this->line($annotations);
|
||||
|
||||
if ($this->confirm('Do you want to prepend these annotations to the file?')) {
|
||||
// Find where to insert (usually before the class declaration)
|
||||
$pattern = '/class\s+'.basename($path, '.php').'/';
|
||||
if (preg_match($pattern, $content)) {
|
||||
$newContent = preg_replace($pattern, $annotations."\n".'$0', $content);
|
||||
File::put($path, $newContent);
|
||||
$this->success('Annotations added to '.basename($path));
|
||||
} else {
|
||||
$this->error('Could not find class declaration to insert annotations.');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->error('AI Error: '.($result['error'] ?? 'Unknown error'));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user