cartella_dati) || !is_dir($amministratore->cartella_dati)) { $amministratore->provisionArchiveIfMissing(); $changed = true; } // 2. Database dedicato $dbName = $amministratore->getDatabaseName(); if ($createDatabase && $this->ensureDatabaseExists($dbName)) { $changed = true; } // 3. Flag provisioned_at if ($changed || $force || !$amministratore->provisioned_at) { $amministratore->provisioned_at = now(); $amministratore->saveQuietly(); } return [ 'amministratore_id' => $amministratore->id, 'database' => $dbName, 'archive_path' => $amministratore->cartella_dati, 'provisioned_at' => $amministratore->provisioned_at, 'changed' => $changed, ]; } protected function ensureDatabaseExists(string $dbName): bool { try { $exists = DB::select("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?", [$dbName]); if (!$exists) { DB::statement("CREATE DATABASE `{$dbName}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); Log::info('[Provisioning] Created database: ' . $dbName); return true; } } catch (\Throwable $e) { Log::error('[Provisioning] Error ensuring database ' . $dbName . ': ' . $e->getMessage()); } return false; } }