L'obiettivo di questo progetto è svluppare un backend che supporti il gioco della dama sviluppato nel seguente github: https://github.com/loks0n/rapid-draughts.
Il sistema si fonda su un meccanismo in cui ogni utente deve essere autenticato tramite JWT e ha la possibilità di partecipare a partite contro un avversario controllato dall’intelligenza artificiale specificando la sua bravura.
È supportata la gestione simultanea di più partite attive all’interno del sistema, consentendo a diversi utenti di sfidare l’IA senza interferenze reciproche. Tuttavia, un utente può essere coinvolto in una sola partita alla volta.
La partita può essere interrotta perdendo però 0.5 punti, ma potendoli riguadagnare vincendo le partite; ogni partita vinta vale 1 punto.
In qualsiasi momento si può visuallizare lo storico delle mosse delle partite assocciate all'utente.
Se si è admin è possibile visualizzare la lista degli utenti.
Di seguito viene mostrato il diaframma dei casi d'suo
Di seguito vengono mostrati i diagrammi delle sequenze con la spiegazione delle rotte
Il body deve essere costruito con email e password:
In caso di successo della richiesta si otterrà:
Il body deve essere costruito con email e password:
In caso di successo della richiesta si otterrà:
In caso di successo della richiesta si otterrà:
Il body deve essere costruito con email e numero token da aggiungere:
In caso di successo della richiesta si otterrà:
Il body deve essere costruito con la difficoltà:
In caso di successo della richiesta si otterrà:
Il body deve essere costruito con il numero della mossa:
In caso di successo della richiesta si otterrà:
Se la mossa non sarà valida verrà restituita la lista delle mosse valide:
In caso di successo della richiesta si otterrà:
In caso di successo della richiesta si otterrà:
In caso di successo della richiesta si otterrà:
Di seguito verranno elencati i pattern utilzizati e le motivazioni
Nel pattern MVC, le rotte sono un punto di ingresso che instrada le richieste verso il componente appropriato del sistema. Le rotte mappano gli URL a specifici controller, che si trovano nella parte Controller del pattern. Quando un utente invia una richiesta HTTP, il router analizza l'URL e decide quale controller e quale azione richiamare. Questo controller, a sua volta, interagisce con il modello per recuperare i dati necessari e con la vista per renderizzarli. In questo progetto, dal momento che è richiesto solo un beckend non c'e la vista.
Il Singleton garantisce che ci sia un'unica istanza della connessione al database in tutto il ciclo di vita dell'applicazione. Questo è fondamentale per risparmiare risorse e gestire meglio le connessioni. In pratica, si crea una classe responsabile della connessione che, quando invocata, restituisce sempre la stessa istanza.
Quando il controller ha bisogno di accedere ai dati, utilizza il modello, il quale a sua volta utilizza la connessione fornita dal Singleton. La prima volta che il modello chiede una connessione, il Singleton la crea; le volte successive restituisce l'istanza già creata. Questo meccanismo assicura che non vengano aperte connessioni ridondanti al database.
La Chain of Responsibility si realizza nei middleware, che sono componenti indipendenti che si occupano di controlli specifici lungo il flusso di una richiesta. Quando una richiesta arriva all'applicazione, passa attraverso una catena di middleware, ognuno dei quali può elaborarla, modificarla o decidere di fermarla.
Ad esempio, un middleware potrebbe controllare l'autenticazione, un altro la validità dei dati della richiesta, e un altro ancora i permessi. Se uno di questi middleware rileva un problema, blocca la catena e restituisce immediatamente una risposta all'utente. In caso contrario, la richiesta viene inoltrata al middleware successivo fino a raggiungere il controller.
Per avviare il progetto bisogna scaricare il seguente github tramite:
git clone https://github.com/umbertomaraglino/ProgrammazioneAvanzata
e successivamente avvaire il docker compose tramite il comando:
docker-compose up --build
Umberto Maraglino