feat: integrate Draco compression for 3D models in backoffice

- Added support for uploading and compressing GLB models using Draco in the backoffice.
- Implemented commands for importing and re-compressing 3D models.
- Updated model resource to handle 3D model uploads and validations.
- Introduced a new script for compressing GLB files with Draco.
- Modified Vite configuration to remove GLB files from the build output.
- Updated package dependencies to include GLTF-transform libraries for handling 3D models.
- Added tests to ensure proper functionality of 3D model handling and compression.
This commit is contained in:
2026-11-01 10:35:50 +01:00
parent 24f9e59654
commit 1208187a17
32 changed files with 895 additions and 52 deletions
+18
View File
@@ -70,6 +70,8 @@ Dettagli in [AVVIO_LOCALE.md](AVVIO_LOCALE.md).
| `APP_CONFIGURATORE_URL` | Link "Configuratore" nel menu admin, solo se servito altrove | `APP_URL/configuratore/` |
| `ADMIN_NOTIFY_EMAIL` | Email che riceve la notifica di nuovo preventivo | — |
| `CORS_ALLOWED_ORIGINS` | Origini autorizzate all'API da domini **esterni** (i frontend serviti dal backend non ne hanno bisogno) | `*` |
| `NODE_BINARY` | Node usato per comprimere con Draco i modelli 3D caricati (es. `/opt/plesk/node/22/bin/node`): PHP-FPM di solito non ha Node nel PATH | `node` |
| `MODELLI_3D_MAX_MB` | Dimensione massima del `.glb` caricabile dal backoffice (anche il limite di PHP `upload_max_filesize`/`post_max_size` deve permetterla) | `200` |
| `DB_*`, `MAIL_*` | Database e posta | — |
### Frontend
@@ -113,6 +115,22 @@ committato anche il `pnpm-lock.yaml` aggiornato (generato con pnpm 10), altrimen
`public/configuratore` e `public/preventivo` vengono svuotate e riscritte: per qualche secondo le due
pagine non sono disponibili.
### Modelli 3D
I `.glb` si caricano dal backoffice (Modelli → scheda del modello → Configurazione 3D). Al salvataggio il
file viene compresso con Draco: l'originale resta archiviato in `storage/app/private/modelli-3d/originali`
(non pubblico), il configuratore scarica solo la copia compressa. Un modello senza 3D non è attivabile e non
compare nel configuratore.
Una tantum, dopo il deploy che introduce questa gestione, importare i modelli che prima stavano nel frontend:
```bash
(cd backoffice && $PHP artisan modelli3d:importa)
```
Il comando salta i modelli che hanno già un 3D (si può rilanciare). `modelli3d:ricomprimi` rigenera le copie
compresse dagli originali (es. dopo una modifica di `scripts/comprimi-glb.mjs`).
### Dopo ogni deploy
- Nel sito `kreiosinfissi.it` l'iframe punta a `https://<backend>/configuratore/?sistema=…&type=…`.