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.

Statistics Service Class Diagram

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à della StatisticsPort attraverso 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.