BookSocial è una piattaforma web dinamica dedicata agli amanti della lettura. Il progetto permette agli utenti di condividere i libri letti, recensirli, scoprire nuovi titoli tramite le API di OpenLibrary e partecipare a discussioni in tempo reale attraverso chat room dedicate ai singoli volumi o a temi generali gestiti dagli amministratori.
- Book Feed: Visualizzazione in tempo reale dei post della community con recensioni e valutazioni.
- Integrazione OpenLibrary: Recupero automatico delle copertine dei libri mancanti tramite API esterne e sezione News dinamica.
- Sistema di Rating: Valutazione dei libri con un sistema a stelle (1-5).
- Controllo Duplicati: Impedisce all'utente di aggiungere più volte lo stesso libro tramite vincoli di unicità nel database.
- Discussioni Dinamiche: Ogni libro nel feed ha un tasto "Discuss" che reindirizza a una chat room unica basata sul titolo del libro.
- Persistenza Messaggi: I messaggi non vanno persi al refresh; sono salvati su MySQL e recuperati tramite cronologia (
chat_history). - Presenza Utenti: Visualizzazione degli utenti attivi nella stanza e link rapidi ai profili.
- Gestione Ruoli (RBAC): Sistema differenziato tra
usereadmintramite ENUM nel database. - Admin Panel: Gli amministratori possono eliminare post dal feed e creare stanze chat ufficiali dalla sezione "Rooms".
- Protezione XSS: Protezione nativa contro script malevoli tramite manipolazione sicura del DOM (
textContent) e sanitizzazione degli input, impedendo l'esecuzione di codice arbitrario nelle chat e nei post. - Upload Sicuro: Gestione delle immagini (avatar e copertine) tramite Multer con salvataggio isolato nella cartella
/uploads.
- Backend: Node.js, Express.js
- Database: MySQL / MariaDB
- Real-time: Socket.io
- Frontend: Vanilla JavaScript, HTML5, CSS3
- Middleware: Multer, Express-session
Il database booksocial è composto dalle seguenti tabelle principali:
- users: Gestisce credenziali, bio, immagine profilo e ruolo (
user/admin). - posts: Memorizza le recensioni dei libri. Include una
UNIQUE KEYsu(username, book_title, author)per evitare duplicati. - messages: Archivia i messaggi delle chat collegati alle relative
room. - rooms: Contiene le stanze ufficiali create dagli amministratori.
Assicurati di avere installato:
- Node.js
- MySQL / MariaDB
- Git Bash (fortemente raccomandato su Windows per eseguire lo script di setup)
É incluso uno script init.sh che automatizza l'installazione delle dipendenze, la creazione della cartella uploads, la configurazione del database e la creazione del file .env.
- Clona il repository:
git clone https://github.com/UniCT-WebDevelopment/booksocial
- Rendi lo script eseguibile:
chmod +x init.sh
- Esegui lo script:
sudo ./init.sh
Nota: Ti verrà chiesta la password di root di MySQL per creare il database e l'utente dedicato.
- Avvia il server:
node app.js
Se non puoi usare init.sh, segui questi passaggi:
- Esegui
npm install
- Crea manualmente il database
booksocialusando le informazioni fornite indatabase.sql. - Crea un file
.envnella root con le tue credenziali DB (Host, User, Pass, Name, Port). - Crea la cartella
uploadsnella cartella principale del progetto.
Dopo aver eseguito lo script di setup, è presente un utente amministratore predefinito:
- Username:
admin - Password:
admin
/uploads: Immagini del profilo e copertine caricate dagli utenti./public: Contiene i file statici (HTML, CSS, JS lato client).app.js: Punto di ingresso del server Node.js e logica Socket.io.init.sh: Script di inizializzazione ambiente.package.json: Gestione delle dipendenze del progetto..env.example: Esempio di file .env da creare (Senza script).database.sql: Struttura del database.
Progetto realizzato con ❤️ da: Sara Ouelhazi
Developer & Book Lover 📚