Files
kreios/docs/PREVENTIVI_BACKOFFICE.md
T
carmine.savino 0dfda3a338 Refactor PVC models and update tests
- 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.
2026-10-20 18:40:59 +02:00

102 lines
6.6 KiB
Markdown

# 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`](../backoffice/README.md).
Per il contratto dei parametri URL del configuratore vedi [`URL_PARAMS.md`](./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
(o `php artisan serve`), come qualsiasi file in `public/`.
- L'`index.html` di ciascun frontend è servito dalle route `configuratore` e `preventivo` in
[`backoffice/routes/web.php`](../backoffice/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 in `src/index.html` aggiunge 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`](../src/js/api_base.js)).
Override possibili: `VITE_PREVENTIVI_API_BASE` a build time (`.env*` nella root del repo) o
`window.PREVENTIVI_API_BASE` a runtime — servono solo se l'API sta su un altro dominio.
- **App cliente → API**: di default `${location.origin}/api` ([`backoffice/cliente/src/api.js`](../backoffice/cliente/src/api.js)),
override con `VITE_API_BASE`.
- **Configuratore → app cliente**: il link "Vai al preventivo" usa `frontend_cliente_url` restituito da
`GET /api/config` ([`backoffice/config/preventivi.php`](../backoffice/config/preventivi.php)), che di default
vale `APP_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](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
1. `./build.sh` dalla root: compila configuratore e app cliente in `backoffice/public/configuratore` e
`backoffice/public/preventivo` (cartelle ignorate da git: vanno generate in fase di deploy o caricate
insieme al backend).
2. Backend: `.env` di produzione (`APP_URL`, `DB_*`, `MAIL_*`, `ADMIN_NOTIFY_EMAIL`), poi
`php artisan migrate --force`, `php artisan storage:link`, `php artisan config:cache`.
3. Nel sito `kreiosinfissi.it` l'iframe punta a `https://<backend>/configuratore/?sistema=…&type=…`.
4. Restringere `CORS_ALLOWED_ORIGINS` (o lasciarlo vuoto) se nessun dominio esterno usa l'API.
5. 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`](../backoffice/routes/web.php) — route `/configuratore/` e `/preventivo/`.
- [`vite.config.js`](../vite.config.js), [`backoffice/cliente/vite.config.js`](../backoffice/cliente/vite.config.js) — `base` e `outDir` dentro `backoffice/public`.
- [`src/js/api_base.js`](../src/js/api_base.js), [`backoffice/cliente/src/api.js`](../backoffice/cliente/src/api.js) — base URL dell'API.
- [`src/js/starter.js`](../src/js/starter.js) — integrazione configuratore↔backend, link all'app cliente.
- [`backoffice/config/preventivi.php`](../backoffice/config/preventivi.php) — `frontend_cliente_url`, `configuratore_url`.
- [`build.sh`](../build.sh), [`dev.sh`](../dev.sh) — build e ambiente di sviluppo.