You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
3.1 KiB
Markdown
64 lines
3.1 KiB
Markdown
# Lupus Lite
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
# Development Mode: also starts "npm run dev" inside "_frontend/"
|
|
$ MODE=dev go run .
|
|
|
|
# Production Mode
|
|
$ cd _frontend
|
|
$ npm run build
|
|
$ go build
|
|
```
|
|
|
|
## Architettura
|
|
|
|
Moduli principali (cose che vengono eseguite e fanno cose di _business logic_)
|
|
|
|
- [`/main.go`](./main.go)
|
|
|
|
Entry point principale del server, qui vengono inizializzate concretamente tutte le dipendenze dei vari moduli (come database, router http e servizio di autenticazione).
|
|
|
|
Per ora usiamo un semplice database ed un semplice servizio di autenticazione per le sessioni di accesso che tengono tutto in memoria (più avanti passeremo a SQLite, tanto basterà semplicemente scrivere un'altra implementazione per `database.Database`)
|
|
|
|
- [`/routes`](./routes)
|
|
|
|
Questo modulo dipende **molto** dal router HTTP in quanto contiene tutte le route del server. Oltre questo dipende solo dal modulo `/handlers` e non sa nulla di `/database` e `/auth`.
|
|
|
|
- [`/handlers`](./handlers)
|
|
|
|
Questo modulo permette di testare tutta l'applicazione in modo isolato dal resto in quanto non sa nulla dei router HTTP e dipende solo da `/auth` e `/database` (ed anche da `/events`, `/model` e `/util` ma questi sono moduli "puri") che possono essere facilmente _mocked_.
|
|
|
|
Moduli secondari (o boh "terminali" nel senso che dipendono solo da cose esterne a questo progetto)
|
|
|
|
- [`/events`](./events)
|
|
|
|
Questo modulo fornisce una struttura dati di "EventBus" che permette di mandare e ricevere eventi all'interno dell'applicazione.
|
|
|
|
- [`/model`](./model)
|
|
|
|
Questo modulo contiene i modelli di tutte le strutture usate nel database ed alcuni metodi di servizio come `User.PublicUser()` che converte un `User` in `PublicUser` che rappresenta la versione "sicura" senza i campi segreti (come l'hash della password) dell'utente.
|
|
|
|
- [`/database`](./database)
|
|
|
|
L'interfaccia principale è `Database` e contiene tutte le operazioni possibili da fare sul database. Per ora c'è solo un'implementazione in memoria data da `*memDB`
|
|
|
|
- [`/auth`](./auth)
|
|
|
|
L'interfaccia principale è `AuthService` e contiene alcuni metodi per autenticare e registrare gli utenti e creare token di sessione. Per ora l'unica implementazione è `*memAuth` e dipende da un'istanza di `database.Database` e tiene i token di sessione in memoria.
|
|
|
|
- [`/util`](./util)
|
|
|
|
Questo modulo contiene alcune funzioni di utility e per ora anche varie funzioni di validazione dei form che arrivano dalla frontend, come validazione di username e password per la registrazione degli utenti.
|
|
|
|
Ed infine c'è il modulo che si occupa del far avanzare le partite e della risoluzione automatica.
|
|
|
|
- [`/lupus`](./lupus)
|
|
|
|
Questo modulo non dipende da nulla, l'idea è che conterrà le strutture per gestire lo stato delle partite e gli algoritmi per la risoluzione automatica di quest'ultime.
|
|
|
|
Al massimo potrebbe contenere alcune informazioni su come serializzare lo stato delle partite però per ora tutte le strutture qui dentro sono annotate per essere serializzate a JSON ed anche quando passeremo ad SQLite forse converrà fare sempre così.
|
|
|
|
TODO: Al massimo potrebbe dipendere da `/model` ma forse non serve.
|