Skip to content

Latest commit

Β 

History

149 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

CodeShop β€” Full-Stack E-Commerce for Digital Products

Spring Boot MySQL JWT PayPal

CodeShop rappresenta un ecosistema full-stack concepito per rivoluzionare la vendita e la distribuzione di asset digitali. La piattaforma si distingue per un'architettura robusta che coniuga le prestazioni enterprise di Spring Boot 3.x e Java 21 con un'interfaccia utente moderna basata su estetica Glassomorphism e navigazione fluida in modalitΓ  SPA. Grazie all'integrazione nativa con PayPal REST API e a un sistema di autenticazione stateless basato su JWT, il progetto garantisce transazioni sicure e un controllo granulare degli accessi. L'intero ciclo di vendita Γ¨ completamente automatizzato attraverso l'implementazione del pattern Observer, che assicura la consegna istantanea dei prodotti tramite notifiche email e aree riservate, mentre la completa containerizzazione con Docker rende l'intera infrastruttura scalabile e pronta per il deployment immediato in ambienti di produzione.


πŸ“– Indice


✨ Caratteristiche Principali

πŸ”’ Autenticazione & Sicurezza

  • JWT (JSON Web Token): Autenticazione stateless con token a scadenza (24h).
  • RBAC: Gestione ruoli differenziata tra USER e ADMIN.
  • Password Security: Criptazione delle credenziali e notifiche email in caso di modifica.

πŸ›’ Esperienza d'Acquisto

  • Catalogo Dinamico: Navigazione prodotti filtrata per categorie (Snippet, Progetti, Database).
  • Carrello Avanzato: Gestione persistente del carrello con ricalcolo totali lato server.
  • Integrazione PayPal: Flusso di pagamento sicuro tramite PayPal REST SDK con verifica transazione lato server.

πŸ“¦ Delivery Digitale

  • Download Automatico: Al termine del pagamento, l'utente riceve istantaneamente un'email con il link di download.
  • Area Riservata: Storico ordini completo con pulsante "Scarica" per ogni prodotto acquistato (disponibile per 14 giorni).
  • Notifiche Transazionali: Sistema di notifiche via email per registrazione, ordini e sicurezza account.

πŸ› οΈ Backoffice Amministrativo

  • Gestione Catalogo (CRUD): Interfaccia dedicata per gli amministratori per aggiungere, modificare o rimuovere prodotti in tempo reale.
  • Controllo Accessi Avanzato: Visualizzazione completa degli ordini e dei file per la gestione operativa.
  • Policy di Download: Implementazione di restrizioni temporali (es. 14 giorni) per il download dei file da parte degli utenti, garantendo la sicurezza degli asset.

🎨 UI/UX

  • Modern Design: Interfaccia responsiva con effetti Glassomorphism e animazioni fluide.
  • SPA (Single Page Application): Navigazione dinamica senza ricaricamento della pagina.

πŸ› οΈ Tech Stack

Componente Tecnologie
Backend Java 21, Spring Boot 3.x, Spring Security
Persistence Spring Data JPA, Hibernate, MySQL
Security JSON Web Token (JWT)
Payments PayPal REST API SDK
Email Spring Mail (SMTP), HTML Templates
Frontend HTML5, CSS3 (Vanilla), JavaScript (ES6+)
Container Docker, Docker Compose
Build Tool Maven

πŸ“ Design Patterns

Il progetto implementa diversi pattern architetturali per garantire scalabilitΓ  e manutenibilitΓ :

  • Observer Pattern: Utilizzato per il sistema di notifiche. Ogni azione rilevante (Registrazione, Ordine) notifica i vari Observer per l'invio di email o log di sistema.
  • MVC (Model-View-Controller): Separazione netta tra logica di business, persistenza e presentazione.
  • Repository Pattern: Per l'astrazione dell'accesso ai dati tramite Spring Data JPA.

πŸ“‚ Architettura del Progetto

ProgettoFinale/
β”œβ”€β”€ final_project/
β”‚   β”œβ”€β”€ src/main/java/com/example/final_project/
β”‚   β”‚   β”œβ”€β”€ Config/          # Configurazioni (PayPal)
β”‚   β”‚   β”œβ”€β”€ Controller/      # Endpoint REST API
β”‚   β”‚   β”œβ”€β”€ Model/           # EntitΓ  JPA (User, Product, Order, etc.)
β”‚   β”‚   β”œβ”€β”€ Repository/      # Interfacce Spring Data JPA
β”‚   β”‚   β”œβ”€β”€ Service/         # Business Logic e integrazioni esterne
β”‚   β”‚   β”œβ”€β”€ Security/        # Logica JWT e Filtri di sicurezza
β”‚   β”‚   └── Observer/        # Implementazione del pattern Observer
β”‚   └── src/main/resources/
β”‚       β”œβ”€β”€ static/          # Frontend Assets (HTML, CSS, JS)
β”‚       └── application.yaml # Configurazione applicativa

πŸš€ Installazione e Setup

Prerequisiti

  • JDK 21 o superiore
  • MySQL 8.0+
  • Maven 3.8+
  • Docker & Docker Compose (opzionale per esecuzione in container)

Step 1: Clonare il repository

git clone https://github.com/Michecosa/ProgettoFinale.git
cd ProgettoFinale/final_project

Step 2: Configurazione Database

Crea un database MySQL chiamato final_project:

CREATE DATABASE final_project;

Step 3: Configurazione Ambiente

Copia il file .env.example in un nuovo file chiamato .env e inserisci le tue credenziali (Database, Email SMTP, PayPal). È importante sapere che il progetto utilizza due file .env per diversi scopi:

  • .env nella cartella principale (ProgettoFinale/): Viene utilizzato da Docker Compose. Quando lanci docker-compose up, Docker cerca questo file per configurare il database e l'applicazione nei container.
  • .env dentro la cartella final_project/: Viene utilizzato per l'avvio locale (tramite IntelliJ, VS Code o ./mvnw spring-boot:run). Spring Boot carica automaticamente questo file per risolvere le variabili definite in application.yaml.

Step 4: Build e Avvio

mvn clean install
mvn spring-boot:run

L'applicazione sarΓ  disponibile all'indirizzo: http://localhost:8080


🐳 Docker & Containerizzazione

Il progetto Γ¨ completamente containerizzato con Docker e Docker Compose, permettendo di avviare l'intero stack (App + Database) senza installare MySQL o Java localmente.

Prerequisiti

  • Docker Desktop installato e avviato
  • Maven 3.8+ (solo per compilare il JAR)

Passo 1 β€” Configura il file .env

Copia .env.example in .env nella cartella principale (ProgettoFinale/) e compila i valori:

cp .env.example .env

Se non hai una password per MySQL (es. XAMPP su Windows), lascia DB_PASSWORD= vuoto β€” funziona sia con password vuota che con una password impostata.


Passo 2 β€” Compila il JAR

cd final_project
./mvnw clean package -DskipTests   # Mac / Linux
mvnw.cmd clean package -DskipTests  # Windows
cd ..

Passo 3 β€” Avvia i container

Dalla cartella ProgettoFinale/:

docker compose up --build -d

Docker avvierΓ  prima il database e aspetterΓ  che sia pronto, poi avvierΓ  Spring Boot. Al primo avvio Hibernate crea automaticamente tutte le tabelle.


Passo 4 β€” Carica i dati iniziali

Dopo il primo avvio (necessario solo la prima volta, o dopo docker compose down -v):

Mac / Linux:

docker exec -i mysql_db mysql -uroot final_project < init-data.sql
# se hai impostato una password:
docker exec -i mysql_db mysql -uroot -pTUAPASSWORD final_project < init-data.sql

Windows PowerShell:

Get-Content init-data.sql | docker exec -i mysql_db mysql -uroot final_project
# se hai impostato una password:
Get-Content init-data.sql | docker exec -i mysql_db mysql -uroot -pTUAPASSWORD final_project

L'applicazione Γ¨ ora disponibile su http://localhost:8080

Account admin precaricato:

Campo Valore
Username admin
Password miche
Email admin@codemarketplace.it

Comandi utili

Comando Descrizione
docker compose up -d Avvia i container in background
docker compose down Ferma i container (i dati rimangono)
docker compose down -v Ferma e cancella il database
docker compose logs -f app-security Segui i log di Spring Boot in tempo reale
docker compose build --no-cache Ricostruisce l'immagine da zero

Attenzione: docker compose down -v cancella tutti i dati del database. Dopo questo comando sarΓ  necessario ripetere il Passo 4.


Infrastruttura

  • mysql_db: MySQL 8.0 con healthcheck β€” Spring Boot aspetta che il DB sia pronto prima di partire.
  • spring_app: Immagine Alpine con JRE 21, porta 8080 esposta sull'host.

βš™οΈ Configurazione

PayPal Sandbox

Per testare i pagamenti, assicurati di avere un account developer su PayPal Developer e configura le chiavi:

paypal:
  client-id: YOUR_CLIENT_ID
  client-secret: YOUR_CLIENT_SECRET
  mode: sandbox

Variabili d'Ambiente (.env)

Il progetto utilizza il file .env per separare i segreti dal codice. Assicurati che le seguenti chiavi siano configurate:

Variabile Descrizione
DB_URL URL di connessione al database MySQL
DB_USERNAME Username del database
DB_PASSWORD Password del database
MAIL_USERNAME Email per l'invio delle notifiche
MAIL_PASSWORD App Password (per Gmail) o password SMTP
JWT_SECRET Chiave segreta per la firma dei token (Base64)
JWT_EXPIRATION Durata del token in millisecondi
PAYPAL_CLIENT_ID Client ID ottenuto dalla dashboard PayPal
PAYPAL_CLIENT_SECRET Secret ottenuto dalla dashboard PayPal
PAYPAL_MODE sandbox per test o live per produzione

πŸ‘₯ Team di Sviluppo


Donato Morra

Michela Della Gatta

πŸ“„ Licenza

Questo progetto Γ¨ distribuito sotto Licenza MIT. Consulta il file LICENSE per ulteriori dettagli.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages