diff --git a/app/Http/Controllers/SetupWizardController.php b/app/Http/Controllers/SetupWizardController.php index 6a28a0a..bced169 100644 --- a/app/Http/Controllers/SetupWizardController.php +++ b/app/Http/Controllers/SetupWizardController.php @@ -22,8 +22,21 @@ use Spatie\Permission\Models\Role; class SetupWizardController extends Controller { + private function dbReady(): bool + { + try { + \DB::connection()->getPdo(); + return true; + } catch (\Throwable $e) { + return false; + } + } + public function index(Request $request): View|RedirectResponse { + if (!$this->dbReady()) { + return view('setup.database'); + } $step = (int) $request->get('step', 1); return view('setup.wizard', [ @@ -37,6 +50,9 @@ class SetupWizardController extends Controller public function store(Request $request): RedirectResponse { + if (!$this->dbReady()) { + return redirect()->route('setup.index')->withErrors(['db' => 'Database belum siap. Periksa konfigurasi DB & migrasi.']); + } $step = (int) $request->input('step', 1); if ($step === 1) { diff --git a/app/Http/Middleware/EnsureDatabaseReady.php b/app/Http/Middleware/EnsureDatabaseReady.php new file mode 100644 index 0000000..71f6c68 --- /dev/null +++ b/app/Http/Middleware/EnsureDatabaseReady.php @@ -0,0 +1,27 @@ +is('setup*')) { + return $next($request); + } + + try { + DB::connection()->getPdo(); + } catch (\Throwable $e) { + return redirect()->route('setup.index') + ->withErrors(['db' => 'Database belum dikonfigurasi. Silakan lengkapi pengaturan DB & migrate sebelum melanjutkan.']); + } + + return $next($request); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..0368f08 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,7 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; +use Illuminate\Support\Facades\DB; class AppServiceProvider extends ServiceProvider { @@ -19,6 +20,14 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - // + try { + DB::connection()->getPdo(); + app()->instance('db.ready', true); + } catch (\Throwable $e) { + // Fallback agar aplikasi tetap jalan ke halaman setup + config(['session.driver' => 'file']); + config(['cache.default' => 'file']); + app()->instance('db.ready', false); + } } } diff --git a/bootstrap/app.php b/bootstrap/app.php index c1067f7..06f58c6 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -9,6 +9,7 @@ use Spatie\Permission\Middleware\RoleOrPermissionMiddleware; use App\Http\Middleware\MaintenanceReadOnly; use App\Http\Middleware\SessionTimeout; use App\Http\Middleware\AuditRequest; +use App\Http\Middleware\EnsureDatabaseReady; use Illuminate\Console\Scheduling\Schedule; return Application::configure(basePath: dirname(__DIR__)) @@ -25,6 +26,7 @@ return Application::configure(basePath: dirname(__DIR__)) 'maintenance.readonly' => MaintenanceReadOnly::class, 'session.timeout' => SessionTimeout::class, 'audit.request' => AuditRequest::class, + 'db.ready' => EnsureDatabaseReady::class, ]); }) ->withSchedule(function (Schedule $schedule) { diff --git a/resources/views/setup/database.blade.php b/resources/views/setup/database.blade.php new file mode 100644 index 0000000..d5226de --- /dev/null +++ b/resources/views/setup/database.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.custom-master') + +@php +$bodyClass = 'bg-white'; +@endphp + +@section('content') +
Kami tidak dapat terhubung ke database. Pastikan langkah berikut:
+asset_management_system)..env (DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD).php artisan migrate --seed.