feat: add app and database modules

This commit is contained in:
2026-05-21 16:05:11 +07:00
parent 37b7e783f5
commit fad70d096b
212 changed files with 23901 additions and 0 deletions
@@ -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;
}
}