Un viaggio tecnico tra architetture moderne, sicurezza avanzata e sviluppo software professionale

In questo articolo vi parlo dello sviluppo di un backend completo e containerizzato per la gestione dei piani di navigazione di un drone marino autonomo. Questo progetto non è solo un esercizio universitario, ma una vera e propria simulazione di software production-ready, che utilizza tecnologie moderne e pattern architetturali tipici dello sviluppo enterprise.

In questo articolo voglio raccontarti cosa abbiamo realizzato, quali tecnologie abbiamo scelto e soprattutto perché: ogni componente ha uno scopo preciso e contribuisce a creare un sistema robusto, scalabile e sicuro.


🧭 Obiettivo del progetto

L’applicazione si occupa di gestire:

  • richieste di piani di navigazione,
  • percorsi geolocalizzati con waypoint,
  • valutazione di aree vietate,
  • autorizzazioni/verifiche da parte di operatori,
  • ricariche token da parte di amministratori.

Il sistema implementa tre ruoli:

  • User → crea e cancella richieste, visualizza i propri piani
  • Operator → crea/gestisce le aree vietate e valuta le richieste
  • Admin → ricarica il credito degli utenti

Ogni operazione è protetta tramite JWT RS256, con permessi controllati tramite RBAC (Role-Based Access Control).


🔧 Tecnologie scelte e perché

🟦 Node.js 22 + TypeScript

Il cuore dell’applicazione.
TypeScript garantisce tipizzazione, sicurezza e manutenibilità. Node 22 offre performance moderne, API aggiornate e pieno supporto ES modules.

✔ leggibilità
✔ grande ecosistema
✔ ottimo per API REST ad alta concorrenza


🚀 Express

Il framework più semplice e affidabile per esporre API REST.
Usato insieme ai middleware per implementare:

  • autenticazione
  • controllo ruoli
  • logging richieste
  • gestione errori centralizzata
  • validazioni e filtri sulle rotte

La struttura è stata suddivisa in router modulari per mantenere il codice organizzato: public, areas, requests.


🛢️ PostgreSQL 16 + Sequelize ORM

Abbiamo scelto PostgreSQL per affidabilità, tipi avanzati e compatibilità con Docker.
Sequelize ci permette di:

  • definire modelli ad oggetti,
  • generare migrazioni versionate,
  • gestire transazioni atomiche (importantissime nel progetto),
  • semplificare CRUD e relazioni.

Per esempio, la creazione di una richiesta usa una transazione: prima si addebitano token, poi si salva la richiesta, tutto in “tutto o niente”.


🐳 Docker + Docker Compose

È la tecnologia che dà portabilità assoluta al progetto: chiunque può avviare l’app senza installare Node, Postgres o librerie.

I container utilizzati:

  • api → backend Node/TS
  • db → PostgreSQL con volume persistente
  • adminer → GUI DB (facoltativa)

Per Michela, per me, per qualsiasi studente o professore:
👉 funziona allo stesso modo su Windows, Mac, Ubuntu e anche su distro molto vecchie.


🔐 JWT RS256 + Docker Secrets

La sicurezza del sistema è robusta:

  • firma dei token con chiave privata,
  • verifica con chiave pubblica,
  • chiavi memorizzate come secrets, non nel codice,
  • issuer e audience verificati con precisione,
  • validazioni e scadenze corrette.

Il controllo accessi è basato su ruoli (RBAC):

  • solo gli operatori possono accettare/rifiutare,
  • solo gli admin possono ricaricare token,
  • gli user vedono solo le richieste proprie.

📡 Esportazione JSON + XML (Strategy Pattern)

Una delle funzionalità richieste è l’esportazione dei dati in JSON e XML.

Noi abbiamo implementato:

  • JSON → default
  • XML → tramite fast-xml-parser

A livello architetturale questa parte segue lo Strategy Pattern: il controller sceglie la strategia di export basandosi su format=json|xml.


🗺️ Validazioni “geometriche” con TypeScript

Una parte interessante del progetto è l’analisi delle rotte:

  • un piano è valido solo se il percorso è chiuso (primo punto = ultimo)
  • il percorso non deve attraversare aree vietate
  • la partenza deve essere almeno 48h avanti rispetto all’orario di richiesta

Questa logica è stata incapsulata in funzioni dedicate in utils/geo.ts, con gestione di:

  • rettangoli (aree vietate),
  • segmenti del percorso,
  • rilevamento di intersezioni.

⚙️ Migrazioni, Seed e Deployment

Abbiamo creato un sistema completo di:

  • migrazioni (tabelle, pgcrypto, vincoli),
  • seed iniziali (utenti e aree),
  • database versionato,
  • comandi pronti all’uso:
docker compose run --rm api npm run db:migrate
docker compose run --rm api npm run db:seed


🧪 Testing manuale tramite cURL e JWT generati dal container

Durante lo sviluppo abbiamo testato:

  • ruoli,
  • parametri,
  • errori,
  • edge cases (timestamp, rotta non chiusa, collisioni).

I token JWT vengono generati direttamente dal container con un comando come:

docker compose exec -T api node -e "/* firma JWT qui */"

Questo garantisce che il test utilizzi esattamente le chiavi correnti del sistema.


🎯 Conclusione

Questo progetto è stato un lavoro estremamente formativo per me e Michela.
Abbiamo applicato concetti di:

  • architettura software,
  • sicurezza,
  • validazioni,
  • ORM avanzati,
  • containerizzazione,
  • progettazione REST,
  • pattern enterprise (Unit of Work, Strategy, CoR, Layered Architecture).

Il risultato è un backend completo, professionale e pronto per essere esteso verso un vero sistema di controllo autonomo.

Classificazione: 1 su 5.

One response to “Progetto Drone Marino Autonomo”

  1. Avatar Michela

    È stato un progetto molto interessante e dinamico, mi è piaciuto molto seguire questo progetto! Soprattutto, sono molto contenta di aver imparato nuove cose e di aver scoperto il mondo di Node e Typescript, a cui volevo già avvicinarmi da un po’.

    Grazie della bella esperienza 😊

    Piace a 1 persona

Lascia un commento

One response to “Progetto Drone Marino Autonomo”

  1. Avatar Michela

    È stato un progetto molto interessante e dinamico, mi è piaciuto molto seguire questo progetto! Soprattutto, sono molto contenta di aver imparato nuove cose e di aver scoperto il mondo di Node e Typescript, a cui volevo già avvicinarmi da un po’.

    Grazie della bella esperienza 😊

    Piace a 1 persona

Lascia un commento

novembre: 2025
L M M G V S D
 12
3456789
10111213141516
17181920212223
24252627282930
  1. Avatar di Michela
  2. Avatar di nicolò
  3. Avatar di Raffaele
  4. Avatar di Massimo Galasi
  5. Avatar di Jacopo

    post utile e molto interessante che sono sicuro potrà spronare un’altra persona all’apprendimento di questo argomento e dell’informatica in generale.…

Quote of the week

“Ricorda: anche i programmatori esperti hanno iniziato scrivendo Hello World… e dimenticando il punto e virgola.”

~ Chat GPT