58 lines
1.9 KiB
PHP
58 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace App\Services\Admin;
|
|
|
|
use App\Models\Amministratore;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class AdministratorProvisioningService
|
|
{
|
|
public function provision(Amministratore $amministratore, bool $createDatabase = true, bool $force = false): array
|
|
{
|
|
$changed = false;
|
|
|
|
// 1. Cartelle
|
|
if ($force || empty($amministratore->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;
|
|
}
|
|
}
|