Bus line manager

Tempo fa ho fatto un salto a Parigi. Avendo dei parenti in uno dei comuni prossimi alla Capitale (Bondy per la precisione), ne ho approfittato per vedere finalmente questa famosa Tour Eiffel. Ho passato pochissimo tempo nella città più importante della Francia, ma sono riuscito ad immortalarla in qualche centinaio di fotografie.
Al ritorno, ho preso sempre il pullman. Durante il viaggio facevamo spesso delle fermate in cui potevamo sgranchirci le gambe. Prima di ripartire uno degli autisti contava il numero dei passeggeri e dava l’ok all’altro autista perché partisse. Dopo una di queste fermate ed in seguito al riconteggio dei passeggeri i due autisti si accorsero che vi era un passeggero in più e che sicuramente non aveva un biglietto valido per quella corsa. Vuoi tu per la stanchezza o vuoi perché la loro app non forniva molte funzionalità utili per ridurre la probabilità di errare, fecero salire un passeggero in più senza verificarli il biglietto. Non necessariamente il passeggero era senza biglietto. Reputo infatti che all’origine del problema si sia trattato di un fraintendimento piuttosto. Infatti uno degli autisti spesso parlava con i passeggeri francesi, pero, non conoscendo il francese, egli si limitava a comunicare con loro in italiano. Loro parlavano in francese, lui in italiano e a volte avevo persino l’impressione che si capivano talmente bene da essere in una certa sintonia. Vi sono comunque alte probabilità che il francese abbia capito una cosa e l’autista un’altra e come conseguenza il francese si e fatto un bel viaggio fino a Bologna, magari convinto di andare a Berlino per esempio.
Comunque, non volevo parlare del viaggio, ma di un’idea. Quando i due autisti parlarono del passeggero in più, conclusero che bisognava verificare nuovamente  il biglietto di tutti i passeggeri, ma decisero di abbandonare l’idea. Io allora, tra me e me, mi ero detto “ma quanto sarebbe bello avere una applicazione web, magari fatta con spring boot, GraphQL e hibernate, che ad ogni fermata del pullman fornisce in maniera chiara il numero ed i passeggeri che devono salire e quelli che devono scendere al fine ridurre la possibilità di errore per gli autisti dei mezzi pesanti.

Ho deciso pertanto di implementare, secondo la mia visione, un’applicazione web, dal nome in codice “C’è chi scende e c’è chi sale”, la quale è un gestore delle linee dei pullman.

Il software è clonabile da GitHub. Dentro il progetto vi è la collezione di postman che consente di testare l’applicativo software. Come stack tecnologico abbiamo: GraphQL, Spring Boot, Liquibase, Hibernate, PostgreSQL. Prima di far partire il progetto come applicazione spring boot, è necessario fare un docker-compose up nella root del progetto per avviare il container di postgreSQL. Il motore di GraphQL del progetto risponde all’endpoint http://localhost:8080/graphql.

P.S. lo schema è il seguente:

Il cuore dei service dell’applicazione l’ho implementato con una classe astratta e generica, la CommonServiceImpl. L’esigenza nasce dal fatto che tutti i service devono presentare lo stesso comportamento, ad eccezione di alcuni, i quali sovrascrivono uno dei metodi di CommonServiceImpl.