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.
This commit is contained in:
2026-10-20 18:40:59 +02:00
parent b6a32edfe6
commit 0dfda3a338
33 changed files with 339 additions and 366 deletions
+35 -60
View File
@@ -1,28 +1,26 @@
# Avvio locale — Krèios
Guida per avviare l'ambiente completo di sviluppo: **configuratore 3D**, **backoffice Laravel** (API + pannello admin) e **app cliente** per i preventivi.
Guida per avviare l'ambiente completo di sviluppo: **backoffice Laravel** (API + pannello admin) che serve anche il **configuratore 3D** e l'**app cliente** per i preventivi.
## Panoramica
| Componente | Cartella | Stack | Porta | URL dev |
|---|---|---|---|---|
| Configuratore 3D | `.` (root del repo) | Vite 6 + Three.js + jQuery | **5173** | <http://localhost:5173> |
| Backoffice (API + admin) | `backoffice/` | Laravel 13 + Filament 3 + MySQL | **8000** | <http://localhost:8000/api>, admin su <http://localhost:8000/admin> |
| App cliente preventivi | `backoffice/cliente/` | Vue 3 + Vite | **5199** | <http://localhost:5199> |
Un solo server: **Laravel su <http://localhost:8000>** serve API, pannello admin e i due frontend, che sono
progetti Vite compilati dentro `backoffice/public`.
Le tre porte sono **fisse** (`strictPort: true` nei vari `vite.config.js` / `serve --port`): se una porta è già occupata l'avvio fallisce con un errore esplicito invece di spostarsi silenziosamente su un'altra.
| Componente | Sorgenti | Stack | URL dev |
|---|---|---|---|
| Configuratore 3D | `.` (root del repo) | Vite 6 + Three.js + jQuery | <http://localhost:8000/configuratore/?sistema=pvc&type=finestra_2_ante> |
| App cliente (preventivo) | `backoffice/cliente/` | Vue 3 + Vite | <http://localhost:8000/preventivo/> |
| Backoffice (API + admin) | `backoffice/` | Laravel 13 + Filament 3 + MySQL | <http://localhost:8000/api>, admin su <http://localhost:8000/admin> |
**Come si collegano:**
- Il configuratore chiama l'API Laravel per il carrello (`POST /api/carrello/aggiungi`, ecc.).
- L'URL dell'app cliente **non è hardcoded** nel configuratore: all'avvio chiama `GET /api/config` e usa il `frontend_cliente_url` restituito da Laravel (letto da `APP_FRONTEND_CLIENTE_URL` nel `.env` del backoffice).
- Il flusso completo è descritto in [PREVENTIVI_BACKOFFICE.md](PREVENTIVI_BACKOFFICE.md).
**Come si collegano:** tutto è sulla stessa origine, quindi configuratore e app cliente chiamano `/api/...`
senza configurazione né CORS. Architettura e variabili in [PREVENTIVI_BACKOFFICE.md](PREVENTIVI_BACKOFFICE.md).
## Requisiti
| Strumento | Versione minima | Note |
|---|---|---|
| Node.js | 20+ | per i tre front (Vite) |
| Node.js | 20+ | per compilare i frontend (Vite) |
| pnpm | 8+ | package manager della root e dell'app cliente (`pnpm-lock.yaml` è il lockfile di riferimento) — `npm i -g pnpm` o `corepack enable` |
| PHP | 8.3+ | richiesta da `composer.json` (`"php": "^8.3"`) |
| Composer | 2+ | dipendenze Laravel |
@@ -64,15 +62,13 @@ DB_USERNAME=root
DB_PASSWORD=
APP_URL=http://localhost:8000
APP_FRONTEND_CLIENTE_URL=http://localhost:5199
ADMIN_NOTIFY_EMAIL=tua-email@example.com
MAIL_MAILER=log
```
| Variabile | Descrizione |
|---|---|
| `APP_URL` | Base URL del backoffice |
| `APP_FRONTEND_CLIENTE_URL` | URL dell'app cliente — restituito al configuratore da `GET /api/config` |
| `APP_URL` | Base URL del backoffice (e quindi di `/configuratore/` e `/preventivo/`) |
| `ADMIN_NOTIFY_EMAIL` | Email che riceve la notifica di nuovo preventivo |
| `CONFIGURATOR_SESSION_DAYS` | Durata (giorni) della sessione di login del configuratore |
| `MAIL_MAILER` | `log` in dev: le email finiscono in `storage/logs/laravel.log` (incluso il PDF allegato) |
@@ -98,71 +94,50 @@ php artisan serve --port=8000
> Alternativa: `composer dev` avvia in parallelo server, queue, log (`pail`) e Vite.
## 2) App cliente (Vue) — porta 5199
## 2) Frontend (configuratore + app cliente)
```bash
cd backoffice/cliente
pnpm install
pnpm dev
pnpm install # root: configuratore
(cd backoffice/cliente && pnpm install) # app cliente
./build.sh # compila entrambi in backoffice/public/{configuratore,preventivo}
```
`.env` già presente in repo con il default corretto per lo sviluppo: `VITE_API_BASE=http://localhost:8000/api`.
## 3) Configuratore 3D — porta 5173
```bash
pnpm install
pnpm dev
```
- Il server parte su `0.0.0.0:5173` (vedi `vite.config.js`).
- L'entry point **richiede due parametri obbligatori** nella query string:
```
http://localhost:5173/?sistema=pvc&type=finestra_2_ante
```
Dopo la build, con il solo `php artisan serve` attivo:
- configuratore: <http://localhost:8000/configuratore/?sistema=pvc&type=finestra_2_ante>
- `sistema`: `pvc` | `alluminio` | `legno` | `acciaio`
- `type`: id modello valido per quel sistema (elenco completo in [URL_PARAMS.md](URL_PARAMS.md))
- `type`: id modello valido per quel sistema (elenco in [URL_PARAMS.md](URL_PARAMS.md))
- app cliente: <http://localhost:8000/preventivo/>
Senza i due parametri l'app lancia un errore in fase di avvio.
- In produzione il configuratore gira dentro un `<iframe>` su `kreiosinfissi.it`; in dev si apre direttamente in una tab.
In produzione il configuratore gira dentro un `<iframe>` su `kreiosinfissi.it`; in dev si apre direttamente in una tab.
## Sequenza completa (tre terminali)
## Sviluppo quotidiano: `./dev.sh`
```bash
# Terminale 1 — backoffice Laravel (API + admin)
cd backoffice && php artisan serve --port=8000
# Terminale 2 — app cliente
cd backoffice/cliente && pnpm dev
# Terminale 3 — configuratore (dalla root del repo)
pnpm dev
./dev.sh
```
Avvia Laravel sulla porta 8000 e i due frontend in `vite build --watch`: a ogni modifica dei sorgenti la build
in `backoffice/public` viene rigenerata, basta ricaricare la pagina (non c'è hot reload). Ctrl+C ferma tutto.
## Verifica end-to-end
1. Apri <http://localhost:5173/?sistema=pvc&type=finestra_2_ante> — il modello 3D si carica e il menu è attivo.
1. Apri <http://localhost:8000/configuratore/?sistema=pvc&type=finestra_2_ante> — il modello 3D si carica e il menu è attivo.
2. Configura dimensioni/finiture e clicca **"Aggiungi al preventivo"** → `POST /api/carrello/aggiungi`; il token del carrello viene salvato in `localStorage`.
3. Clicca **"Vai al preventivo"** → si apre <http://localhost:5199/?token=XXX> con il riepilogo del carrello.
3. Clicca **"Vai al preventivo"** → si apre <http://localhost:8000/preventivo/?token=XXX> con il riepilogo del carrello.
4. Compila i dati del cliente e **conferma**.
5. Controlla il risultato:
- il preventivo compare in <http://localhost:8000/admin> con stato `inviato`;
- le email (cliente con PDF allegato + notifica admin) sono in `backoffice/storage/logs/laravel.log`.
## Build di produzione (configuratore)
## Build di produzione
```bash
# 1. Creare .env.production (non tracciato in git) con l'URL API reale
cp .env.production.example .env.production
# -> VITE_PREVENTIVI_API_BASE=https://preventivi.kreiosinfissi.it/api
# 2. Build + zip (build.sh fallisce se .env.production manca)
./build.sh # pnpm build -> dist/ -> rinominata in kreios/ + kreios.zip
./build.sh # configuratore -> backoffice/public/configuratore, app cliente -> backoffice/public/preventivo
```
`pnpm preview` serve localmente la build di produzione per un'anteprima.
Le due cartelle sono ignorate da git e vanno distribuite insieme al backend. Nessun `.env` dei frontend è
necessario: l'API è sulla stessa origine. Checklist completa in [PREVENTIVI_BACKOFFICE.md](PREVENTIVI_BACKOFFICE.md).
## Rigenerare i listini PVC (opzionale)
@@ -183,9 +158,9 @@ Nota: ogni nuovo titolo presente nel foglio ma non ancora mappato va aggiunto al
| Sintomo | Causa probabile / soluzione |
|---|---|
| `Port 5173/5199 is already in use` o errore di porta su 8000 | Le porte sono fisse: individuare e fermare l'altro processo (`lsof -i :5173`) |
| "Aggiungi al preventivo" dà errore / richieste CORS rifiutate | Laravel non è in ascolto su `8000`, oppure `VITE_PREVENTIVI_API_BASE` nel `.env` della root non punta a `http://localhost:8000/api` |
| "Vai al preventivo" apre la URL sbagliata | Controllare `APP_FRONTEND_CLIENTE_URL` nel `.env` del backoffice: il configuratore legge l'URL dell'app cliente da `GET /api/config` |
| `/configuratore/` o `/preventivo/` rispondono 404 "Build … assente" | Eseguire `./build.sh` (o avviare `./dev.sh` e attendere la prima build) |
| Modifiche ai frontend non visibili | Con `./dev.sh` attendere la fine della ricompilazione e ricaricare; senza, rieseguire `./build.sh` |
| "Vai al preventivo" apre la URL sbagliata | Controllare `APP_URL` (ed eventuale `APP_FRONTEND_CLIENTE_URL`) nel `.env` del backoffice: il link viene da `GET /api/config` |
| `SQLSTATE[HY000] [2002] Connection refused` | MySQL non è in esecuzione, oppure credenziali/host errati nel `.env` del backoffice |
| `SQLSTATE[HY000] [1049] Unknown database 'kreios_preventivi'` | Creare il database (vedi sezione 1) |
| Login admin rifiutato | Eseguire `php artisan migrate --seed` e usare `admin@kreiosinfissi.it` / `password` |