Skip to content

UniCT-WebDevelopment/booksocial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BookSocial 📚

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.


🚀 Funzionalità Principali

🏠 Feed & Social

  • 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.

💬 Real-time Chat (Socket.io)

  • 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.

🛡️ Sicurezza e Moderazione

  • Gestione Ruoli (RBAC): Sistema differenziato tra user e admin tramite 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.

🛠️ Tech Stack

  • Backend: Node.js, Express.js
  • Database: MySQL / MariaDB
  • Real-time: Socket.io
  • Frontend: Vanilla JavaScript, HTML5, CSS3
  • Middleware: Multer, Express-session

📊 Database Schema

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 KEY su (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.

⚙️ Installazione e Setup

Prerequisiti

Assicurati di avere installato:

  • Node.js
  • MySQL / MariaDB
  • Git Bash (fortemente raccomandato su Windows per eseguire lo script di setup)

Setup Automatico (Linux / macOS / Git Bash)

É 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.

  1. Clona il repository:
git clone https://github.com/UniCT-WebDevelopment/booksocial
  1. Rendi lo script eseguibile:
chmod +x init.sh
  1. Esegui lo script:
sudo ./init.sh

Nota: Ti verrà chiesta la password di root di MySQL per creare il database e l'utente dedicato.

  1. Avvia il server:
node app.js

Setup Manuale (Windows CMD/PowerShell)

Se non puoi usare init.sh, segui questi passaggi:

  1. Esegui
npm install 
  1. Crea manualmente il database booksocial usando le informazioni fornite in database.sql.
  2. Crea un file .env nella root con le tue credenziali DB (Host, User, Pass, Name, Port).
  3. Crea la cartella uploads nella cartella principale del progetto.

🔑 Credenziali di Accesso Default

Dopo aver eseguito lo script di setup, è presente un utente amministratore predefinito:

  • Username: admin
  • Password: admin

📁 Struttura del Progetto

  • /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.

🎨 Credits

Progetto realizzato con ❤️ da: Sara Ouelhazi

Developer & Book Lover 📚

GitHub LinkedIn

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors