/), comprimendoli come un caricamento dal backoffice. * I modelli che hanno già un modello 3D sono saltati (salvo --forza). */ class ImportaModelli3d extends Command { protected $signature = 'modelli3d:importa {cartella? : Cartella con le sottocartelle per sistema (default: ../src/assets/models)} {--forza : Sostituisce anche i modelli 3D già caricati}'; protected $description = 'Importa i modelli 3D (.glb) dalla cartella del configuratore e li comprime con Draco'; public function handle(Modelli3d $modelli3d): int { $cartella = rtrim($this->argument('cartella') ?? base_path('../src/assets/models'), '/'); if (! is_dir($cartella)) { $this->error("Cartella non trovata: {$cartella}"); return self::FAILURE; } $importati = 0; $errori = 0; $modelli = Modello::with('sistema')->whereNotNull('file_modello')->orderBy('sistema_id')->orderBy('ordine')->get(); foreach ($modelli as $modello) { $etichetta = "{$modello->sistema->codice}/{$modello->codice}"; if ($modello->modello_3d_draco && ! $this->option('forza')) { $this->line(" {$etichetta}: già presente, saltato"); continue; } $file = "{$cartella}/{$modello->sistema->codice}/{$modello->file_modello}"; if (! is_file($file)) { $this->warn(" {$etichetta}: {$modello->file_modello} non trovato"); continue; } try { $modelli3d->carica($modello, $file, $modello->file_modello); $importati++; $this->info(sprintf(' %s: %s → %s', $etichetta, Number::fileSize($modello->modello_3d_dimensione, precision: 1), Number::fileSize($modello->modello_3d_draco_dimensione, precision: 1))); } catch (Modello3dNonValido $e) { $errori++; $this->error(" {$etichetta}: {$e->getMessage()}"); } } $this->newLine(); $this->info("Importati {$importati} modelli 3D".($errori ? ", {$errori} errori" : '').'.'); return $errori ? self::FAILURE : self::SUCCESS; } }