Ruolo: Ideazione, design, sviluppo e infrastruttura. Anno: 2020.
Per una società di investimenti finanziari ho costruito tutta l'infrastruttura informatica: due web app gestionali, un'app mobile e i servizi che le tengono insieme, dall'idea alla pubblicazione.
Stai vedendo questo case study con il motore Legacy. Per vederlo come è stato progettato, attiva il rendering nativo qui sotto.
Clienti su fogli Excel
All'inizio la società gestiva i suoi clienti con dei fogli Excel.
Mi ha commissionato tutta la sua presenza online: applicazioni, grafica, sviluppo e infrastruttura.
Dall'idea alla pubblicazione
Ideazione delle applicazioni, insieme all'azienda.
La grafica.
Due web app gestionali, con Nuxt e Vue sul frontend e Node.js e AdonisJS sul backend.
Un'app mobile con Ionic, Vue e Capacitor, per Android e iOS, con il suo server in NestJS.
I microservizi in Laravel che tengono insieme tutto.
I server e la pubblicazione di tutto, app comprese.
Una porta sola
Le web app e l'app mobile parlano con un solo server, che fa da porta d'ingresso: lì si fa l'accesso, e da lì passano le chiamate a tutti gli altri servizi.
Un proxy controlla chi chiama, aggiunge le chiavi dell'app e del server e, se la richiesta porta dei file, li salva prima su S3 e passa al servizio solo i loro dati. Così le app conoscono un indirizzo solo, e ogni servizio sa sempre chi lo sta chiamando.
Servizi che lavorano insieme
Tutto passa dal core: le app fanno lì il login, e da lì si arriva agli altri servizi. Lo IAM non fa il login: dice al core e all'app chi può entrare dove.
L'area riservata web e l'app mobile parlano solo con il core: login unico, utenti, proxy.
Dal core si arriva al backend dell'app, con i suoi dati; ai file, cioè i moduli PDF; alle code, in tutte e due le direzioni; alle notifiche, con news e avvisi.
Lo IAM dà ruoli e permessi al core e al backend dell'app; non fa il login.
L'app di controllo accessi parla con le notifiche.
Node e Laravel sulla stessa coda
Un lavoro nasce in Node, passa dalla coda di Laravel e lo fa un endpoint, scritto nel catalogo.
Il core e il backend dell'app, in Node, e il pianificatore, in Laravel, mettono i lavori nella coda: la tabella jobs, in MySQL, nel formato di Laravel.
Il worker Laravel prende il lavoro e legge nel catalogo indirizzo, metodo e chiavi.
Chiama l'endpoint del servizio, che fa il lavoro vero.
L'esito va tra i risultati, con richiesta e risposta salvate, o tra i falliti, che dal pannello tornano in coda.
I server in Node scrivono i lavori direttamente nella coda di Laravel, nel suo formato: un lavoro creato da Node lo esegue un microservizio Laravel.
Un pianificatore lancia a orario i lavori periodici, come i calcoli di fine mese, chiamando i servizi con utenti dedicati; se qualcosa va storto, il lavoro resta tra i falliti, da riprovare.
Le notifiche passano tutte da un servizio solo: ogni app le mette in coda, e lui le salva con destinatari e letture e le manda in app, come push o per email.
I dati sono su MongoDB, condivisi tra i servizi; MySQL per le code, Postmark per le email e la firma dei contratti online.
Dai server agli store
I server gestiti da me: all'inizio quelli in Node su Heroku, poi tutto spostato su droplet DigitalOcean gestiti con Laravel Forge.
I database su MongoDB Atlas e i backup su Amazon S3.
L'app mobile pubblicata sull'App Store e su Google Play.
Come una banca online
Ogni cliente con il suo profilo e la sua area privata.
Clienti autonomi nelle operazioni, come in un home banking.