Applicazione web full-stack per gestire e catalogare la propria libreria di casa. Permette di aggiungere, filtrare, cercare e ordinare libri, con caricamento copertine (tramite upload o Cloudinary) e scansione ISBN via webcam.
- Python 3.10+
- FastAPI: Per l'API RESTful ad alte prestazioni.
- Uvicorn: Come server ASGI.
- SQLAlchemy: Per l'ORM e l'interazione con il database.
- PostgreSQL: Come database relazionale.
- Jinja2: Per il rendering dei template HTML lato server (autenticazione, admin).
- Cloudinary: Per l'hosting e la gestione delle copertine dei libri.
- Passlib: Per l'hashing sicuro delle password.
- Pydantic: Per la validazione e la gestione delle impostazioni.
- APScheduler: Per i job programmati (es. keep-alive).
- Vue.js 3: Utilizzato tramite CDN e
importmapper un frontend reattivo. - TailwindCSS: Utilizzato tramite CDN per lo styling rapido e responsive.
- html5-qrcode: Libreria per la scansione di codici a barre/QR via webcam.
- Javascript (ESM): Logica frontend moderna strutturata in moduli (componenti, servizi, utility).
- ✅ Autenticazione Utente: Registrazione e Login sicuri.
- ✅ Gestione Sessioni: Sessioni sicure basate su cookie con limite massimo per utente.
- ✅ Pannello Admin: Sezione per amministratori (
/admin/users) per la gestione degli utenti (reset password, elimina utente). - ✅ CRUD Libri: Funzionalità complete di Aggiungi, Modifica, Elimina e Visualizza libri.
- ✅ Gestione Copertine: Caricamento di copertine tramite file upload o incollando un URL (l'app gestisce il download e l'upload su Cloudinary).
- ✅ Integrazione Google Books: Modal per cercare libri su Google Books e pre-compilare automaticamente il form di aggiunta.
- ✅ Scansione ISBN: Scansione dell'ISBN tramite la webcam/fotocamera del dispositivo.
- ✅ Filtri e Ordinamento: Filtri multi-campo (titolo, autore, ecc.) e ordinamento dinamico.
- ✅ Paginazione "Infinite Scroll": Caricamento efficiente dei libri durante lo scorrimento.
- ✅ Interfaccia Responsive: Design ottimizzato per desktop e mobile con TailwindCSS.
- ✅ Dark Mode: Supporto per il tema scuro, con salvataggio della preferenza in
localStorage. - ✅ Servizi Keep-Alive: Job programmati opzionali per mantenere attivi il servizio web e il database (utile per piattaforme PaaS).
git clone https://github.com/Tugamer89/booklib.git
cd booklibpython -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windowspip install -r requirements.txt- Assicurati di avere un server PostgreSQL in esecuzione.
- Crea un utente e un database:
sudo -u postgres psqlCREATE USER bookuser WITH PASSWORD 'password';
CREATE DATABASE booklib OWNER bookuser;
GRANT ALL PRIVILEGES ON DATABASE booklib TO bookuser;
\q- Apri il file
setup.pye modifica le variabili nella sezione# --- CONFIGURAZIONE DA MODIFICARE ---con i tuoi dati (credenziali DB, chiavi API Cloudinary, ecc.). - Esegui lo script
setup.py. Questo creerà il file.envcon le chiavi segrete e configurerà le tabelle nel database:
python setup.pyPuoi usare lo script bash fornito (per ambienti Linux/macOS, dopo averlo reso eseguibile):
chmod +x start.sh
./start.shIn alternativa, avvia manualmente il server (assicurati che PostgreSQL sia in esecuzione e l'ambiente virtuale sia attivo):
uvicorn main:app --reload --port 8000L'app sarà disponibile su:
➡️ http://127.0.0.1:8000
.
├── main.py # Entry point FastAPI (lifespan, middleware)
├── setup.py # Script per generare .env e creare tabelle
├── core/ # Configurazione e logica di base
│ ├── config.py # Gestione settings (Pydantic)
│ ├── auth.py # Helpers per autenticazione e dipendenze
│ ├── security.py # Validatori credenziali
│ └── ...
├── db/ # Logica Database
│ ├── database.py # Configurazione engine e sessione SQLAlchemy
│ ├── models.py # Modelli SQLAlchemy (User, Book, UserSession)
│ └── crud.py # Funzioni CRUD (get_user, add_book, ecc.)
├── routes/ # Router FastAPI
│ ├── auth.py # Route /auth, /logout
│ ├── books.py # Route / (page), /books-data, /add, /edit, /delete
│ ├── admin.py # Route /admin/*
│ ├── errors.py # Gestori di eccezioni (404, 500...)
│ └── extras.py # Route secondarie (favicon, keepalive)
├── static/ # File statici
│ ├── css/ # CSS
│ ├── js/ # Logica Vue.js e frontend
│ │ ├── components/ # Componenti Vue (BookCard, AddForm, Modals...)
│ │ ├── services/ # Servizio API (api.js)
│ │ ├── utils/ # Helpers (theme, formatters...)
│ │ ├── views/ # Vista principale Vue (Home.js)
│ │ └── main.js # Entry point Vue
│ └── ...
├── templates/ # Template HTML Jinja2 (index.html, auth.html...)
├── requirements.txt # Dipendenze Python
├── .env # (Generato da setup.py) Variabili d'ambiente
└── README.md
MIT License — sentiti libero di usare e modificare.
- fixare icona matita di modifica