Struttura del Progetto
Panoramica completa dell’organizzazione dei file e delle directory de Il Carrubo.
Albero del progetto
il-carrubo-edit/
├── server.js # Backend principale (3.200+ righe)
├── middleware.js # Vercel Edge Middleware
├── server-gui.js # GUI terminale (blessed)
├── api/
│ ├── index.js # Handler serverless Vercel
│ ├── ping-db.js # Health check database
│ └── routes/ # Router RESTful v1
├── cli/
│ ├── carrubo.js # CLI principale
│ └── api.js # Wrapper API per CLI
├── public/
│ ├── *.html # Pagine frontend (20+)
│ ├── script.js # Logica client-side principale
│ ├── assets/ # CSS, JS, fonts, immagini
│ ├── scanner/ # Modulo scanner MRZ
│ ├── ad/dashboard/ # Admin dashboard
│ └── icons/ # Icone PWA
├── data/ # Dati statici (comuni ISTAT, stati)
├── pdftemplate/ # Template PDF
├── logs/ # Log di sessione
├── ssl/ # Certificati SSL (opzionale)
└── docs-site/ # Questa documentazione
File principali
server.js — Backend principale
Il cuore del sistema. Un file monolitico di oltre 3.200 righe che contiene:
- Inizializzazione dell’app Express e dei middleware
- Tutti i 46 endpoint API (CRUD prenotazioni, ospiti, camere, tariffe, ecc.)
- Logica di integrazione con servizi esterni (SOAP, OCR, PDF, email)
- Gestione dell’autenticazione e dell’autorizzazione
- Error handling centralizzato
- Scheduled tasks e job ricorrenti
::: callout[note]
La scelta monolitica è intenzionale: semplifica il deployment, il debugging e la comprensione del flusso per un singolo sviluppatore. Le route API v1 sono in fase di estrazione progressiva nel modulo api/routes/.
:::
middleware.js — Edge Middleware
Middleware eseguito a livello di Vercel Edge, prima che la richiesta raggiunga il server Node.js. Responsabile di:
- Modalità manutenzione — restituisce una pagina di manutenzione se attivata
- Feature flags — abilita/disabilita funzionalità in base alla configurazione
- Redirect — gestisce redirect e rewrite delle URL
server-gui.js — GUI Terminale
Interfaccia terminale interattiva basata su blessed e blessed-contrib. Mostra in tempo reale:
- Log delle richieste HTTP colorate per status code
- Grafici di utilizzo CPU e memoria
- Stato delle connessioni al database
- Contatori di richieste e errori
Directory
api/ — Serverless & Router
| File/Directory | Descrizione |
|---|---|
index.js |
Adapter serverless per Vercel — wrappa l’app Express in un handler compatibile con le Vercel Serverless Functions |
ping-db.js |
Endpoint di health check che verifica la connettività al database. Utilizzato per i cron job di Vercel |
routes/ |
Router modulari per le API RESTful v1. Ogni file gestisce un gruppo di risorse (es. prenotazioni, ospiti) |
cli/ — Interfaccia a riga di comando
| File | Descrizione |
|---|---|
carrubo.js |
Entry point della CLI. Comandi per gestire prenotazioni, ospiti, camere e operazioni di manutenzione dal terminale |
api.js |
Wrapper HTTP per le chiamate API — astrae le richieste REST in metodi JavaScript riutilizzabili dalla CLI |
public/ — Frontend
La directory public/ contiene tutto il frontend, servito staticamente da Express.
| Directory/File | Descrizione |
|---|---|
*.html |
20+ pagine HTML — login, dashboard, prenotazioni, ospiti, camere, calendario, impostazioni e altro |
script.js |
File JavaScript principale del client — gestisce navigazione, chiamate API, rendering dinamico e interazioni UI |
assets/ |
Risorse statiche: file CSS, JavaScript aggiuntivi, font personalizzati e immagini |
scanner/ |
Modulo autonomo per la scansione MRZ — interfaccia fotocamera, elaborazione immagini e parsing dei dati dal documento |
ad/dashboard/ |
Admin dashboard — pannello di amministrazione con grafici, statistiche, gestione utenti e configurazione sistema |
icons/ |
Icone della PWA in varie dimensioni per l’installazione su dispositivi mobile e desktop |
::: callout[tip]
Il frontend utilizza una struttura a pagine singole (multi-page app), dove ogni pagina HTML è indipendente. Lo script.js principale è condiviso tra le pagine per la logica comune.
:::
data/ — Dati statici
Contiene file JSON con dati di riferimento utilizzati dall’applicazione:
- Comuni ISTAT — elenco completo dei comuni italiani con codici ISTAT e province
- Stati — elenco degli stati del mondo con codici ISO e nazionalità
- Codici documento — tipologie di documenti d’identità accettati
pdftemplate/ — Template PDF
Template HTML utilizzati per la generazione di documenti PDF tramite APITemplate.io:
- Ricevute di pagamento
- Welcome letter per gli ospiti
- Report di riepilogo
logs/ — Log di sessione
Directory per i file di log generati durante l’esecuzione del server. I log includono:
- Richieste HTTP con timestamp, metodo, path e status code
- Errori con stack trace completo
- Eventi di sistema (avvio, shutdown, connessioni)
::: callout[note]
La directory logs/ è inclusa nel .gitignore. I log in produzione vengono inviati ad Axiom per la persistenza e l’analisi.
:::
ssl/ — Certificati SSL
Directory opzionale per i certificati SSL quando si esegue il server in HTTPS locale:
cert.pem— Certificato pubblicokey.pem— Chiave privata
docs-site/ — Documentazione
Questa stessa documentazione, costruita con docmd.io. Contiene tutti i file Markdown, la configurazione del sito e le risorse statiche.
Diagramma delle dipendenze
Prossimi passi
| Sezione | Descrizione |
|---|---|
| Architettura del Sistema | Diagrammi e flussi architetturali |
| Stack Tecnologico | Tecnologie e librerie utilizzate |
| API Reference | Documentazione completa dei 46 endpoint |