Ya'piu è un'applicazione web per la gestione di un magazzino di gintonera. L'idea nasce dopo aver parlato con un amico addetto al settore di mixology che mi ha espresso la necessità di esporre un menu aggiornato di tutte le ricette disponibili in base ad un magazzino degli ingredienti aggiornato.
Il progetto nasce con l'obbiettivo di creare un'applicazione web che permetta di gestire un magazzino di gintonera in modo semplice e veloce. Il servizio dispone di 3 livelli di autenticazione per esporre funzioni diverse in base al tipo di accesso effettuato. In un unico servizio, c'è la possibilità per degli utenti non registrati di effettuare degli ordini che vengono registrati nel DB e comunicati ai barman. Il token placeholder di chi effettua la richiesta comunica solo il tavolo dell'utente che effettua la richiesta. In un ipotetico servizio reale, sarebbe necessario applicare anche un sistema di pagamento per poter inoltrare la richiesta. Il secondo livello di sicurezza corrisponde a quello degli addetti e permette di avere accesso agli ordini non ancora consegnati e il tavolo di chi ha effettuato la richiesta. I barman devono essere registrati quindi autorizzati dall'amministratore. Al terzo livello vediamo l'amministratore che ha il compito di gestire il magazzino. In questo caso, l'amministratore ha accesso a tutte le funzioni del servizio: aggiungere carichi al magazzino, decidere i prezzi, registrare ricette, controllare le disponibilità di magazzino e gestire le proposte al cliente.
Il sistema di autenticazione è basato su un login con codifica della password registrata in hmac-sha256; autenticarsi è necessario solo per accedere alle funzioni da BARMAN o ADMIN, infatti il token di autenticazione dei clienti non contiene dati sensibili, ma solo i dati di chi effettua un ordine. A seconda del ruolo dell'utente esso verrà reindirizzato a diversi url dell'interfaccia web; i clienti avranno solo la possibilità di fare ordini, i barman potranno indicare quando un ordine viene consegnato al tavolo e l'admin può aggiungere prodotti in magazzino, ricette, parametri per ingredienti e brands di Gin e registrare nuovi utenti autenticati.


Il token CUSTOMER decrittato contiene solo il tavolo e il ruolo


Il token ADMIN decrittato
Il metodi di Login nel frontend inoltre gestiscono il caso di connessione non riuscita per timeout e credenziali sbagliate, avvertendo l'utente.

Il sistema di report e quantificazione si basa sul design pattern di un qualsiasi gestionale di magazzino: il database si basa su carichi e scarichi: le operazioni di carico registrano l'utente che effettua l'operazione, la data, i prodotti e le quantità. Quando si effettuano degli ordini i barman effettuano degli scarichi impiegando parte dei prodotti per la preparazione dei cocktails. I report di magazzino e le query che quantificano i prodotti per determinare se le ricette sono preparabili non si basa quindi sulla semplice quantificazione dei prodotti in magazzino, ma su delle query specifiche per categoria che sommano i prodotti distinti per qualità e sottraggono tutte le quantità utilizzate per estrinsecare un ordine.
Il sistema di autenticazione garantisce diversi autorizzazioni e funzioni, in base quanto necessario.
Al livello base, abbiamo l'utente acquirente, a cui si presuppone siano esposti diversi qrcode dell'esercente che sta usando il software.
L'utente che scannerizza questi qrcode accede ad un endpoint che crea un token che registra solo il tavolo e il contatto dell'utente autenticato. Si avrà accesso ad un endpoint che propone il menu al cliente: esso sarà il risultato della scansione delle quantità di prodotti in magazzino e delle ricette registrate dall'admin: mostra le ricette effettivamente preparabili con i prodotti attualmente presenti in magazzino, i prezzi, le varianti possibili e le aggiunte, oltre che proporre le varietà di Gin compatibili con ogni ricetta. Quindi, con questo livello di autenticazione, il front end da accesso ad un endpoint che registra un “ordine“ nel database.

Il secondo livello di autenticazione è quello garantito ai dipendenti, che richiederà una password che genererà un token di sessione con scadenza di 8 ore (sperando che non debbano fare straordinari!) che garantisce l'accesso alle funzioni di visualizzazione degli ordini creati dagli utenti, effettuare degli "scarichi" quando si consumano ingredienti per realizzare gli ordini e confermare il completamento dell'ordine.
Il database, in futuro, sarà quindi in grado di risalire in maniera accurata a chi ha preparato ogni singola bevanda servita, registrerà anche in maniera separata se è stata preparata e servita da dipendenti diversi. Notare che queste funzioni non modificano i dati nel database inerenti il carico (ovvero la spesa di ingredienti), ma creano dei record di quantità utilizzate associate in una relazione many-to-one con la bottiglia impiegata o la bottiglia di tonica o il lotto di alimenti generici utilizzati (il software assume che si usi la bottiglia aperta da prima e l'alimento non scaduto più vicino alla scadenza).

Il terzo livello di login è dedicato agli esercenti. Esso permette di effettuare dei carichi di prodotti in magazzino, permette di aggiungere dei sovrapprezzi per i brand di gin più rinomati utilizzabili come opzioni proposte agli utenti, registrare ricetti, aggiungere o cancellare gli utenti dipendenti e ottenere report di magazzino in .excel e .pdf sulle entrate e uscite, sulle disponibilità materiali di magazzino, sulle attività di ogni dipendente in ogni turno e i trend degli ordini effettuati.