Statistics Service
Contenuti
Descrizione
Lo Statistics Service è un servizio che gestisce i punteggi degli utenti all’interno di un’applicazione.
Implementazione
L’implementazione dello Statistics Service è descritta dal seguente diagramma delle classi UML.

Come si può vedere dal diagramma, l’implementazione del servizio dipende dal framework HexArc.
In particolare, il servizio definisce due componenti principali:
StatisticsPort: definisce le funzionalità del servizio.StatisticsHttpAdapter: espone alcune delle funzionalità dellaStatisticsPortattraverso un contratto di tipo REST, disponibile al seguente link.
Le funzionalità definite dalla StatisticsPort sono le seguenti:
getScore: restituisce l’ultimo punteggio di un utente del servizio;getScoreHistory: restituisce tutte le statistiche di un utente del servizio;getLeaderboard: restituisce la classifica globale degli utenti del servizio;addScore: aggiunge un nuovo punteggio per un utente del servizio;deleteScores: rimuove tutte le statistiche di un utente del servizio.
Tali funzionalità sono definite nei termini dei concetti del dominio del servizio. In particolare, i modelli relativi a tali concetti sono i seguenti:
Score: modella un punteggio nel servizio;UserScore: modella il punteggio di un utente nel servizio;UserScoreHistory: modella le statistiche di un utente nel servizio.
L’implementazione della StatisticsPort è modellata dallo StatisticsModel. Lo StatisticsModel gestisce la persistenza dei dati nel servizio attraverso una PersistentCollection e per comunicare con la PersistentCollection utilizza il linguaggio delle query MongoDBQueryLanguage. Quindi, implementa tutte le funzionalità della StatisticsPort attraverso delle opportune query.
Lo StatisticsHttpAdapter e lo StatisticsModel possono generare delle eccezioni, modellate dalla classe StatisticsServiceException. In particolare, l’utente che utilizza il servizio potrebbe essere notificato delle seguenti StatisticsServiceException:
MalformedInputException: indica all’utente che l’input specificato per una certa funzionalità da lui richiesta non è corretto;UserNotFoundException: indica all’utente che il nome utente da lui specificato non è associato a nessun dato nel sistema.
Verifica
Per verificare il sistema, è stata creata una suite di test manuali su Postman, in modo da accertarsi che tutte le funzionalità esposte dal contratto REST del servizio producessero i risultati attesi.
In futuro, si dovrà creare degli unit test equivalenti, ma automatici. Per fare ciò, sarà necessario approfondire come creare un database MongoDB di tipo in-memory in Scala.
Esecuzione
Per eseguire il sistema è disponibile un jar al seguente link.
Per eseguire il jar è sufficiente utilizzare il seguente comando:
java -jar statistics-service-<version>.jar \
--mongodb-connection MONGODB_CONNECTION_STRING
In particolare, il jar permette di specificare i seguenti argomenti a linea di comando:
--mongodb-connection MONGODB_CONNECTION_STRING: obbligatorio. Permette di specificare la stringa (MONGODB_CONNECTION_STRING) per connettersi all’istanza di MongoDB che sarà utilizzata dal servizio per memorizzare i propri dati.--mongodb-database DATABASE_NAME: opzionale. Permette di indicare il nome del database (DATABASE_NAME) all’interno dell’istanza di MongoDB specificata in cui il servizio memorizzerà i propri dati. Default:statistics.--mongodb-collection COLLECTION_NAME: opzionale. Permette di indicare il nome della collezione (COLLECTION_NAME) all’interno del database MongoDB specificato in cui il servizio memorizzerà i propri dati. Default:scores.--http-host HOST: opzionale. Permette di indicare il nome dell’host (HOST) su cui sarà esposto il contratto REST del servizio. Default:localhost.--http-port PORT: opzionale. Permette di indicare la porta dell’host (PORT) su cui sarà esposto il contratto REST del servizio. Default:8080.--allowed-origins ORIGIN_1;ORIGIN_2;...;: opzionale. Permette di indicare una lista dei siti web che saranno autorizzati a comunicare con il servizio. Tale lista consiste in una sequenza di URL separati da;. Default: nessun sito web autorizzato.
In alternativa, un’immagine per eseguire il jar è stata pubblicata anche su Docker. Per eseguire il servizio tramite Docker è sufficiente utilizzare il seguente comando:
docker run -it -p 8082:8080 jahrim/io.github.jahrim.chess.statistics-service:<version> \
--mongodb-connection MONGODB_CONNECTION_STRING \
--http-host 0.0.0.0 \
--http-port 8080
Dopodiché, il servizio è accessibile al seguente URL: http://localhost:8082.