Sistema gestionale per il Matched Betting sviluppato con Spring Boot 3 e PostgreSQL.
BetFlow Manager e' un'applicazione backend che permette di gestire operazioni di matched betting, tracciando identita', conti gioco, promozioni e operazioni finanziarie (depositi, prelievi, scommesse).
- Gestione Utenti: Registrazione con upload avatar, autenticazione JWT, 3 ruoli (ADMIN, MANAGER, OBSERVER)
- Gestione Identita': CRUD completo per i clienti gestiti con tracking documenti
- Piattaforme: Gestione bookmaker e exchange
- Conti Gioco: Tracciamento saldi e stato account per ogni piattaforma
- Promozioni: Monitoraggio bonus e rollover
- Operazioni Finanziarie: Depositi, prelievi e scommesse con ereditarieta' JPA
- Statistiche: Calcolo profitti per identita' e dashboard aggregata
- Notifiche: Alert Telegram per scadenze documenti e promozioni
- Java 17
- Spring Boot 3.2.0
- Spring Security + JWT
- Spring Data JPA
- Spring GraphQL (Punto Extra)
- PostgreSQL
- Lombok
- Cloudinary (upload immagini)
- Telegram Bot API (notifiche automatiche schedulate)
- ExchangeRate-API (conversione valuta - Punto Extra)
User (1) -----> (*) Identity (1) -----> (*) Account (1) -----> (*) Promotion
|
v
FinancialOperation (abstract)
/ | \
Deposit Withdrawal BetOperation
Platform (1) -----> (*) Account
FinancialOperation(classe astratta padre - tabellafinancial_operations)Deposit(tabelladeposits- metodo pagamento)Withdrawal(tabellawithdrawals- stato e data arrivo)BetOperation(tabellabet_operations- evento, quota, esito)
La strategia JOINED crea tabelle separate per ogni sottoclasse, con foreign key verso la tabella padre.
- Java 17+
- PostgreSQL 14+
- Maven 3.8+
Crea un file application.properties in src/main/resources/ con le seguenti configurazioni:
# Database PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/betflow_db
spring.datasource.username=YOUR_DB_USERNAME
spring.datasource.password=YOUR_DB_PASSWORD
# JWT
jwt.secret=YOUR_JWT_SECRET_KEY_MIN_256_BITS
jwt.expiration=86400000
# Cloudinary
cloudinary.cloud-name=YOUR_CLOUD_NAME
cloudinary.api-key=YOUR_API_KEY
cloudinary.api-secret=YOUR_API_SECRET
# Telegram Bot
telegram.bot.token=YOUR_BOT_TOKEN
telegram.bot.chat-id=YOUR_CHAT_IDgit clone https://github.com/alb308/BackEndGiuntaAlberto2724.git
cd BackEndGiuntaAlberto2724Il file docker-compose.yml è già configurato per funzionare out-of-the-box con variabili di default.
Se vuoi personalizzare le chiavi (JWT, Cloudinary, Telegram), modifica src/main/resources/application.properties prima di avviare il container.
Esegui il comando dalla root del progetto:
docker-compose up -d --buildQuesto avvierà sia il database PostgreSQL che l'applicazione backend.
L'app sarà disponibile su http://localhost:8080.
Se preferisci eseguire l'app senza Docker (assicurati di avere PostgreSQL attivo su porta 5432):
mvn spring-boot:runIl progetto include test unitari e di integrazione (JUnit 5 + Mockito + H2).
mvn testQuesto comando eseguira' la suite di test verificando:
- Logica di business (UserService)
- Endpoint di autenticazione e sicurezza (AuthController)
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| POST | /api/auth/register |
Registrazione utente | Pubblico |
| POST | /api/auth/login |
Login | Pubblico |
| GET | /api/auth/me |
Profilo utente corrente | Autenticato |
| PATCH | /api/auth/me/avatar |
Aggiorna avatar | Autenticato |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/users |
Lista utenti | ADMIN |
| GET | /api/users/{id} |
Dettaglio utente | ADMIN |
| PUT | /api/users/{id} |
Modifica utente | ADMIN |
| DELETE | /api/users/{id} |
Elimina utente | ADMIN |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/identities |
Lista identita' | Tutti |
| GET | /api/identities/{id} |
Dettaglio | Tutti |
| POST | /api/identities |
Crea identita' | ADMIN, MANAGER |
| PUT | /api/identities/{id} |
Modifica | ADMIN, MANAGER |
| DELETE | /api/identities/{id} |
Elimina | ADMIN, MANAGER |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/platforms |
Lista piattaforme | Tutti |
| POST | /api/platforms |
Crea piattaforma | ADMIN, MANAGER |
| DELETE | /api/platforms/{id} |
Elimina | ADMIN |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/accounts |
Lista account | Tutti |
| GET | /api/accounts?identityId={id} |
Filtra per identita' | Tutti |
| GET | /api/accounts?platformId={id} |
Filtra per piattaforma | Tutti |
| POST | /api/accounts |
Crea account | ADMIN, MANAGER |
| PUT | /api/accounts/{id} |
Modifica | ADMIN, MANAGER |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/promotions |
Lista promozioni | Tutti |
| GET | /api/promotions?status=ACTIVE |
Filtra per stato | Tutti |
| GET | /api/promotions?expiringDays=7 |
Promozioni in scadenza | Tutti |
| POST | /api/promotions |
Crea promozione | ADMIN, MANAGER |
| PATCH | /api/promotions/{id}/rollover |
Aggiorna rollover | ADMIN, MANAGER |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/operations/deposits |
Lista depositi | Tutti |
| POST | /api/operations/deposits |
Crea deposito | ADMIN, MANAGER |
| GET | /api/operations/withdrawals |
Lista prelievi | Tutti |
| POST | /api/operations/withdrawals |
Crea prelievo | ADMIN, MANAGER |
| GET | /api/operations/bets |
Lista scommesse | Tutti |
| POST | /api/operations/bets |
Crea scommessa | ADMIN, MANAGER |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/statistics/dashboard |
Stats aggregate | Tutti |
| GET | /api/statistics/profits |
Lista profitti tutte le identita' | Tutti |
| GET | /api/statistics/profits/{identityId} |
Profitto identita' | Tutti |
| GET | /api/statistics/profits/profitable |
Identita' in profitto | Tutti |
| GET | /api/statistics/profits/unprofitable |
Identita' in perdita | Tutti |
| Metodo | Endpoint | Descrizione | Accesso |
|---|---|---|---|
| GET | /api/currency/rates |
Tassi di cambio (base EUR) | Tutti |
| GET | /api/currency/rates/{base} |
Tassi di cambio custom | Tutti |
| GET | /api/currency/convert?amount=X&from=EUR&to=USD |
Conversione valuta | Tutti |
| GET | /api/currency/convert/eur-to/{currency}?amount=X |
Da EUR a valuta | Tutti |
| GET | /api/currency/convert/to-eur/{currency}?amount=X |
Da valuta a EUR | Tutti |
| Ruolo | Permessi |
|---|---|
| ADMIN | Accesso completo, CRUD su tutto |
| MANAGER | CRUD su Identity, Account, Promotion, Operations (no DELETE operations) |
| OBSERVER | Solo lettura su tutti i dati |
- Filtraggio: Account per identita'/piattaforma, promozioni per stato
- Ordinamento: Operazioni per data
- Aggregazioni: Somma depositi, prelievi, calcolo profitto
- Condizioni multiple: Promozioni attive in scadenza entro X giorni
- Cloudinary: Upload e gestione immagini profilo utente
- Telegram Bot API: Notifiche automatiche schedulate per scadenze documenti e promozioni
- ExchangeRate-API (Punto Extra): Conversione valuta in tempo reale con supporto per 150+ valute
Il sistema invia automaticamente notifiche via Telegram:
| Task | Frequenza | Descrizione |
|---|---|---|
| Daily Summary | Ogni giorno alle 9:00 | Riepilogo documenti e promozioni in scadenza |
| Document Expiry Check | Ogni giorno alle 8:00 | Alert per documenti che scadono entro 7 giorni |
| Promotion Expiry Check | Ogni 6 ore | Alert per promozioni che scadono entro 3 giorni |
| Expired Promotions Update | Ogni giorno a mezzanotte | Aggiorna automaticamente lo stato delle promozioni scadute |
Importa il file BetFlow_Manager.postman_collection.json presente nella root del progetto.
Alberto Giunta - Progetto Finale Backend