- Updated the PVC models in the database and adjusted the tests accordingly to reflect the new model counts and codes. - Removed deprecated models from the JSON data for PVC systems. - Added new GLB models for "scorrevole_sf_3_ante" and "scorrevole_sf_4_ante". - Enhanced the development scripts to streamline the build process for both frontends. - Updated documentation to reflect changes in the development environment and deployment process. - Improved the styling of texture radio options for better visibility. - Fixed URL handling in the configurator to ensure proper routing and API calls.
6.6 KiB
Backoffice Preventivi — Architettura, ambienti e deploy
Questo documento descrive il sistema di preventivi collegato al configuratore: come sono collegati i componenti, come vengono serviti e cosa serve per portarlo in produzione.
Per il modello dati, l'API e il flusso applicativo dettagliato vedi backoffice/README.md.
Per il contratto dei parametri URL del configuratore vedi URL_PARAMS.md.
Architettura: un solo server
Backend Laravel (backoffice/) — unica origine
┌──────────────────────────────────────────────────────────────────────────────────┐
│ /configuratore/ build statica del configuratore 3D (root repo, Vite+Three.js) │
│ /preventivo/ build statica dell'app cliente (backoffice/cliente, Vue 3) │
│ /api/... API catalogo, prezzi, carrello, auth │
│ /admin pannello Filament │
└──────────────────────────────────────────────────────────────────────────────────┘
| Componente | Sorgenti | Build in | URL |
|---|---|---|---|
| Configuratore 3D | / (root repo, src/) |
backoffice/public/configuratore/ |
/configuratore/?sistema=…&type=… |
| App cliente (preventivo) | backoffice/cliente/ |
backoffice/public/preventivo/ |
/preventivo/?token=… |
| Backend (API + admin) | backoffice/ |
— | /api, /admin |
I due frontend restano progetti Vite separati, ma vengono compilati dentro backoffice/public e serviti da
Laravel: un solo dominio, un solo processo, nessun CORS tra frontend e API. Il configuratore e l'app cliente
non si parlano direttamente: il configuratore scrive nel carrello via API, l'app cliente lo legge via API;
il collegamento tra i due è il token passato in query string nel link "Vai al preventivo".
Come vengono serviti
- I file statici (
/configuratore/assets/…,/preventivo/assets/…) li serve direttamente il web server (ophp artisan serve), come qualsiasi file inpublic/. - L'
index.htmldi ciascun frontend è servito dalle routeconfiguratoreepreventivoinbackoffice/routes/web.php(Cache-Control: no-cache, così una nuova build è visibile subito; gli asset hanno nomi con hash). Se la build manca rispondono 404. - Il configuratore usa path runtime relativi (
./assets/…), quindi l'URL deve finire con/: Apache/nginx reindirizzano/configuratore→/configuratore/, e uno script inline insrc/index.htmlaggiunge lo slash anche quando il server non lo fa (es.php artisan serve).
URL dell'API e dell'app cliente
- Configuratore → API: di default
${location.origin}/api(src/js/api_base.js). Override possibili:VITE_PREVENTIVI_API_BASEa build time (.env*nella root del repo) owindow.PREVENTIVI_API_BASEa runtime — servono solo se l'API sta su un altro dominio. - App cliente → API: di default
${location.origin}/api(backoffice/cliente/src/api.js), override conVITE_API_BASE. - Configuratore → app cliente: il link "Vai al preventivo" usa
frontend_cliente_urlrestituito daGET /api/config(backoffice/config/preventivi.php), che di default valeAPP_URL/preventivo. Fallback se l'API non risponde:${location.origin}/preventivo.
Sviluppo
./dev.sh dalla root avvia php artisan serve --port=8000 e i due vite build --watch: ogni modifica ai
sorgenti ricompila il frontend in backoffice/public/…; basta ricaricare la pagina (non c'è HMR).
Dettagli in AVVIO_LOCALE.md.
Variabili d'ambiente
Backend Laravel (backoffice/.env)
| Variabile | Descrizione | Default |
|---|---|---|
APP_URL |
URL pubblico del backend: base per link nelle email, /preventivo e /configuratore/ |
— |
APP_FRONTEND_CLIENTE_URL |
Solo se l'app cliente non è servita dal backend | APP_URL/preventivo |
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) | * |
DB_*, MAIL_* |
Database e posta | — |
Frontend
Nessuna variabile necessaria. VITE_PREVENTIVI_API_BASE (root) e VITE_API_BASE (backoffice/cliente)
restano disponibili solo per puntare a un'API su un dominio diverso.
Checklist di deploy in produzione
./build.shdalla root: compila configuratore e app cliente inbackoffice/public/configuratoreebackoffice/public/preventivo(cartelle ignorate da git: vanno generate in fase di deploy o caricate insieme al backend).- Backend:
.envdi produzione (APP_URL,DB_*,MAIL_*,ADMIN_NOTIFY_EMAIL), poiphp artisan migrate --force,php artisan storage:link,php artisan config:cache. - Nel sito
kreiosinfissi.itl'iframe punta ahttps://<backend>/configuratore/?sistema=…&type=…. - Restringere
CORS_ALLOWED_ORIGINS(o lasciarlo vuoto) se nessun dominio esterno usa l'API. - Verifica end-to-end: configurare un prodotto → "Aggiungi al preventivo" → "Vai al preventivo" apre
/preventivo/sullo stesso dominio → completare il checkout → il preventivo compare in Filament e le email (cliente + admin) sono inviate.
deploy.sh (upload di kreios.zip su un host statico separato) appartiene al vecchio schema a server
separati e non serve più.
Riferimenti file
backoffice/routes/web.php— route/configuratore/e/preventivo/.vite.config.js,backoffice/cliente/vite.config.js—baseeoutDirdentrobackoffice/public.src/js/api_base.js,backoffice/cliente/src/api.js— base URL dell'API.src/js/starter.js— integrazione configuratore↔backend, link all'app cliente.backoffice/config/preventivi.php—frontend_cliente_url,configuratore_url.build.sh,dev.sh— build e ambiente di sviluppo.