eVit@ – Evoluzione piattaforma

Il progetto eVit@, originariamente sviluppato in PHP, è stato oggetto di una completa revisione architetturale con l’obiettivo di separare le diverse componenti applicative e adottare una struttura più moderna, scalabile e facilmente manutenibile.

Organizzazione del progetto

La nuova versione è organizzata in tre progetti principali:

  • /backend-node
    Backend sviluppato in Node.js, responsabile della logica applicativa e delle API di servizio. Il server è configurato per l’ascolto sulla porta 3000.
  • /app-flutter
    Applicazione mobile sviluppata in Flutter, pensata per offrire accesso alla piattaforma da dispositivi Android e iOS.
  • /website-next
    Sito web sviluppato con React e Next.js, configurato per l’ascolto sulla porta 3001.

Backend e API

Il backend Node.js rappresenta il punto centrale dell’architettura: tutte le logiche di business sono state concentrate nelle API, utilizzate sia dall’applicazione web realizzata con Next.js sia dall’applicazione mobile sviluppata con Flutter.

L’autenticazione degli utenti avviene tramite l’API:

auth/login

che restituisce due token JWT:

  • access token, utilizzato per autenticare le richieste alle API protette;
  • refresh token, utilizzato per ottenere un nuovo access token quando quello corrente è scaduto.

Le chiamate successive alle API che richiedono autenticazione includono il token di accesso nell’header della richiesta. Nel caso in cui il token non sia più valido, il sistema utilizza il refresh token disponibile per richiedere automaticamente un nuovo access token.

Documentazione e test delle API

Le API del backend sono documentate e disponibili per i test tramite Swagger.

L’interfaccia di documentazione è raggiungibile aggiungendo il percorso:

/docs

all’indirizzo del backend.

Dopo aver effettuato il login, il token JWT ottenuto può essere inserito nell’interfaccia Swagger per abilitare l’esecuzione delle chiamate che richiedono autenticazione.

Ottimizzazione tramite Redis

L’introduzione di Redis consente di ridurre i tempi di risposta delle API che restituiscono dati soggetti a poche variazioni nel tempo.

Un esempio è rappresentato dalle API relative a informazioni geografiche come regioni e province, che vengono memorizzate temporaneamente in cache evitando interrogazioni ripetute al database.

Accesso al database con Prisma

L’accesso al database viene gestito tramite Prisma, un ORM moderno che permette di interagire con le tabelle utilizzando un modello tipizzato in TypeScript.

Questo approccio consente di ridurre gli errori in fase di sviluppo e di mantenere una maggiore coerenza tra struttura del database e codice applicativo.

Gestione della localizzazione

La localizzazione delle risposte avviene attraverso l’header:

Accept-Language

che indica la lingua richiesta dal client.

Il valore ricevuto viene utilizzato dalla libreria i18n per restituire messaggi localizzati nelle risposte delle API, permettendo alla piattaforma di supportare più lingue.

Protezione dei dati sensibili

In conformità ai principi previsti dal GDPR, i dati sensibili memorizzati nel database vengono salvati in forma criptata.

L’accesso ai dati in chiaro viene gestito attraverso viste dedicate, consentendo di mantenere separata la memorizzazione protetta delle informazioni dalla loro eventuale visualizzazione applicativa.

Sicurezza nelle registrazioni e recupero password

Le procedure di registrazione utente e recupero della password utilizzano Cloudflare Turnstile, un sistema progettato per verificare che le richieste siano generate da utenti reali e non da processi automatizzati.

Gestione delle email

Le email inviate durante le procedure di registrazione e recupero password vengono generate dinamicamente tramite la libreria Handlebars.

I messaggi utilizzano template localizzati in base alla lingua ricevuta nell’header delle API, garantendo comunicazioni coerenti con le preferenze linguistiche dell’utente.

Questo video mostra una breve panoramica del nuovo progetto.