Coder Social home page Coder Social logo

famila-sc2024's Introduction

FamilaProject

Cloud Functions CI/CD Arduino Build

famila-sc2024's People

Contributors

shokk47 avatar fabb-24 avatar

Stargazers

Vito Stefano Birardi avatar  avatar

Watchers

 avatar

famila-sc2024's Issues

Crare il servizio "Product"

Crare il microservizio Product realizzato tramite functions su GCP che realizza i requisiti funzionali (1.1.*).
A tal fine è necessario implementare i seguenti endpoints:

(?:optional)

- GET : .../api/product/get?EAN=....
Descrizione: Recupera le informazioni di un prodotto specifico in base al suo codice EAN.
Return: {status:"ok/error msg", data?:{prodotto}}

- POST : .../api/product/add
Descrizione: Aggiunge uno o più nuovi prodotti.
Body: [{prodotto}]
Return: {status:"ok/error msg", data:[list of ean product added]}

- PUT : .../api/product/upd
Descrizione: Aggiorna le informazioni di un prodotto esistente.
Body: [{prodotto}]
Return: {status:"ok/error msg", data:[{list of ean product updated}]}

- DELETE : .../api/product/delete
Descrizione: Elimina uno o più prodotti in base al loro EAN.
Body: [EAN]
Return: {status:"ok/error msg", data:[{list of ean product deleted}}

Note

  • Validazione Input: Implementare una rigorosa validazione dei dati in ingresso per garantire la sicurezza e l'integrità del microservizio.
  • Gestione Errori: Definire codici di errore e messaggi chiari per facilitare il debug e la risoluzione dei problemi.

Creare il servizio "Receipt"

Crare il microservizio Product realizzato tramite functions su GCP che realizza i requisiti funzionali (1.4.*).
A tal fine è necessario implementare i seguenti endpoints:

(?:optional)

**- GET : .../api/receipt/get?id=....
Descrizione: Recupera le informazioni di uno scontrino in base al sui ID
Return: {status:"ok/error msg", data?:{scontrino}}

**- POST : .../api/receipt/add
Descrizione: Aggiunge un nuovo scontrino contenente la lista dei prodotti e le relative quantità. Verifica che la quantità di ogni prodotto sia superiore alla soglia minima di rifornimento. Se la quantità è inferiore alla soglia, aggiungi il prodotto alla coda Pub/Sub dei prodotti da ordinare.
Body: [{prodotto, quantità}]
Return: {status:"ok/error msg", data:{ID dello scontrino creato}}

Note

  • Validazione Input: Implementare una rigorosa validazione dei dati in ingresso per garantire la sicurezza e l'integrità del microservizio.
  • Gestione Errori: Definire codici di errore e messaggi chiari per facilitare il debug e la risoluzione dei problemi.

Aggiornare il workflow CI/CD delle google functions

Il workflow attuale prevede 3 sezioni:

  • get_changed_function per ottenere la lista delle funzioni modificate.
  • build_and_test per eseguire l'analisi statica del codice e i test sulle funzioni modificate.
  • deploy_production per eseguire il deploy delle funzioni modificate.

Il task di deploy non prevede meccanismi per configurare i parametri del deploy, come ad esempio la funzione di avvio o i secrets. Trovare un modo per poterli configurare e aggiornare facilmente.

Definire i requisiti dell'applicazione

Definire i requisiti dell'applicazione che gestirà il digital twin del supermercato, consentendo la gestione dei prodotti e l'interazione tra il mondo fisico e quello virtuale. Il digital twin sarà realizzato su FlexSim e si interfaccerà con un'architettura a microservizi su Google Cloud per l'accesso al database e lo scambio di dati.

main points:

  • Gestione degli scaffali e scorta prodotti.
  • Ordini automatici in caso di scorte in esaurimento.
  • Statiche di vendita

Creare il servizio "Rack"

Il microservizio Rack, implementato tramite Cloud Functions su Google Cloud Platform (GCP), soddisferà i requisiti funzionali (1.2.*) relativi alla gestione dei rack e delle loro componenti.

(?:optional)

- POST : .../api/rack/add
Descrizione: Registra un nuovo rack e le sue componenti (baie, livelli, slot).
Body: [{RackID, [{BaiaID,Categoria}], [{slotID, livello}]]
Return: {status:"ok/error msg", data:[{list of rack id added}]}

- POST : .../api/rack/setBaiaCategory
Descrizione: Impsta o aggiorna la categoria di una o più baie.
Body: [{BaiaID,categoria}]
Return: {status:"ok/error msg", data:[{list of baia setted}]}

- POST : .../api/rack/setSlotProduct
Descrizione: Associa prodotti agli slot (un prodotto per slot).
Body: [{SlotID, prodotto, quantità}]
Return: {status:"ok/error msg", data:[{list of product setted}]}

- GET : .../api/rack/getSlot?slotID=...
Descrizione: Ottiene il contenuto di uno slot specifico.
Return: {status:"ok/error msg", data: {quantità, prodotto}}

- GET : .../api/rack/getNews
Descrizione: Legge gli elementi inseriti nella coda Pub/Sub slotUpdated quando i prodotti vengono acquistati.
Return: {status:"ok/error msg", data: [{rackID,baiaID,livello,slotID,prodotto,nuovaQuantità}]

Note

  • Validazione Input: Implementare una rigorosa validazione dei dati in ingresso per garantire la sicurezza e l'integrità del microservizio.
  • Gestione Errori: Definire codici di errore e messaggi chiari per facilitare il debug e la risoluzione dei problemi.

Creare il codice per gestire il barcode scanner

Come indicato in "(RF8.1) Utilizzo di un barcode scanner per la scansione dei prodotti alla cassa", è necessario sviluppare il codice su Arduino per gestire il barcode scanner.

Inserire il codice all'interno della cartella root/arduino.

Creare il modello 3d del supermercato

Creare il modello 3d del supermercato realizzando i seguenti requisiti funzionali:

  • (RF5.1) Il supermercato deve includere cinque rack nella zona di vendita, di cui uno dedicato a frigoriferi/freezer.
  • (RF5.2) Il supermercato deve disporre di una piccola area dedicata a frutta e verdura.
  • (RF5.3) Il supermercato deve essere dotato di almeno una cassa automatica.
  • (RF5.4) Il supermercato deve includere una reception, un ufficio con spazio per riunioni, uno spogliatoio e un magazzino.
  • (RF5.5) Il magazzino deve avere un accesso rapido sia alla zona supermercato sia all'esterno per il carico e scarico degli ordini.
  • (RF5.6) Il magazzino deve avere una superficie minima di 60 m².
  • (RF5.7) Il magazzino deve essere suddiviso in due aree principali: scarico/stock merce e area mezzi di movimentazione.
  • (RF5.8) L'intera struttura deve rispettare le normative di sicurezza e essere dotata di estintori.

Inserire il modello 3d del supermercato e relativi file associati all'interno della cartella root/3dModels/supermercato

Creare il codice per la gestione dei pulsanti e led

Realizzare il codice che realizza i seguenti requisiti funzionali:

  • (RF8.5) Possibilità di avviare il conto scontrino e completare i pagamenti tramite un pulsante dedicato
  • (RF8.6) Indicazione dell'esito del pagamento e dello stato della cassa tramite un LED.

Attendere il completamento delle issue: #21,#22,#23.

Con riferimento alla issue #22:

Stati

Aggiungere 4 nuovi stati:

  • stato di conferma annullamento scontrino: viene richiesto all'utente se conferma di coler annullare lo scontrino
  • stato di annullamento scontrino: viene avvisato l'utente che lo scontrino è stato annullato. Dopo qualche istante la cassa torna allo stato iniziale
  • stato di pagamento fallito: la cassa entra in questo stato quando il pagamento non va a buon fine. Viene mostrato un messaggio di errore e dopo qualche istante la cassa torna allo stato iniziale
  • stato di prodotto non trovato: la cassa entra in questo stato quando non è stato possibile ricavare le informazioni relative a un prodotto dopo averne scannerizzato l'ean. Viene mostrato un messaggio di errore e dopo qualche istante la cassa torna nello stato di conteggio dello scontrino

Pulsante

Il pulsante deve seguire queste azioni:

  • Quando si è nello stato 1 (Stato iniziale), il click del pulsante porta allo stato 2 (Stato conteggio dello scontrino).
  • Quando si è nello stato 2 (Stato conteggio dello scontrino), il click del pulsante porta allo stato 3 (Stato conferma pagamento), mentre il doppio click porta allo stato di conferma annullamento contrino.
  • Quando si è nello stato 3 (Stato conferma pagamento), il click porta allo stato 4 (Stato attesa carta), mentre il doppio click riporta allo stato 2 (Stato conteggio dello scontrino).
  • Quando si è nello stato di conferma annullamento scontrino, il click del pulsante porta allo stato di annullamento scontrino, mentre il doppio click porta allo stato 2 (Stato conteggio dello scontrino)

Esempio di libreria utile per la gestione dei pulsanti : OneButton
(!) Gestire il pulsante utilizzando la modalità interrupt.

Led

  • Quando si è nello stato di pagamento ok si accende il led verde
  • Quando si è nello stato di pagamento fallito si accende il led rosso
  • Quando si è nello stato di prodotto non trovato si accende il led rosso

(!) Utilizzare timer non bloccanti.

Inserire il codice sviluppato nella cartella root/arduino.

Aggiornare i requisiti funzionali (Arduino)

Aggiornare i requisiti funzionali nel file report.md per includere quelli relativi ad Arduino:

  1. Implementare il codice per gestire lo scanner su Arduino.
  2. Implementare il codice per gestire il sensore RFID su Arduino.
  3. Implementare il codice per la gestione dei pulsanti e led.
  4. Implementare il codice per la connessione tra Arduino e GCP e per ottenere i dati dei prodotti tramite EAN.
  5. Implementare il codice per gestire il display su Arduino.

Creare il servizio "Database Gateway"

Nell'ambito della nostra architettura a microservizi su GCP, è necessario implementare un servizio dedicato per gestire le richieste al database MySQL in modo centralizzato. Questo servizio, denominato "Database Gateway", avrà il compito di astrarre la logica di accesso ai dati, migliorare la sicurezza e facilitare la scalabilità del sistema.

Obbiettivo

L'obiettivo di questa issue è implementare il microservizio "Database Gateway", utilizzando il framework Flask e l'API RESTful. Il microservizio dovrà essere in grado di:

  • Ricevere richieste: Accettare richieste POST contenenti query SQL (select, insert, update e delete).
  • Eseguire query: Stabilire una connessione sicura al database MySQL su GCP ed eseguire le query ricevute.
  • Restituire risultati: Restituire i risultati delle query in formato JSON.
  • Gestire errori: Gestire eventuali errori di connessione al database o di esecuzione delle query, restituendo messaggi di errore appropriati.

Aggiornare il file di configurazione per "dbgateway"

Aggiornare i secrets di dbgateway-config.json in modo da corrispondere a quelli richiesti nel codice:

INSTANCE_CONNECTION_NAME = os.getenv('DB_INSTANCE_CONNECTION_NAME')
DB_NAME = os.getenv('DB_NAME')
DB_USER = os.getenv('DB_USER')
DB_PASSWORD = os.getenv('DB_PASSWORD')

Realizzare il file sql del database

Realizzare il file sql per la creazione del database sulla base del modello logico precedentemente creato e salvarlo in una nuova cartella "db".

Ottimizzare "dbgateway"

Ottimizzare la google function "dbgateway" seguendo i principi descritti in questo articolo.

In particolare, implementare soluzioni per migliorare le prestazioni della function, come ad esempio sfruttare il contesto globale per la gestione degli oggetti di connessione al db, al fine di ridurre i tempi di elaborazione della function stessa.

Creare il file .fsm del supermercato

(!!) Richiesto il completamento della issue #16.

Creare il file iniziale di Flexsim per il supermercato importando il modello 3D del supermercato e posizionando correttamente gli scaffali.

Caricare il file nella directory: root/Flexsim

Crare il codice per la gestione del sensore RFID

Come richiesto in "(RF8.3) Utilizzo di un lettore RFID per acquisire i dati della carta di credito per il pagamento", è necessario implementare il codice su Arduino per gestire il lettore RFID.

Creare il servizio "Order"

Crare il microservizio Order realizzato tramite functions su GCP che realizza i requisiti funzionali (1.3.*).
A tal fine è necessario implementare i seguenti endpoints:

(?:optional)

GET : ../api/order/get?data=...
Descrizione: Restituisce l'eventuale ordine in arrivo nella data selezionata.
Return: {status: "ok/error msg", data: {Order ID, Order Info, [Product, quantity]}}

POST : .../api/order/order-delivered
Descrizione: Contrassegna come consegnato l'ordine indicato.
Body: {Order ID}
Return: {status: "ok/error msg", data: [{EAN, nome prodotti riacquistati, quantità di scatole}]}

POST : .../api/order/create
Descrizione: Se ci sono prodotti nella coda Pub/Sub dei prodotti da ordinare, genera l'ordine di rifornimento. Se vengono generati più ordini nella stessa data, li cumula in un unico ordine.
Return: {status: "ok/error msg", data: [{EAN, nome prodotti riacquistati, quantità di scatole}]}

Note

Validazione Input: Implementare una rigorosa validazione dei dati in ingresso per garantire la sicurezza e l'integrità del microservizio.
Gestione Errori: Definire codici di errore e messaggi chiari per facilitare il debug e la risoluzione dei problemi.

Aggiornare i requisiti funzionali (Flexsim)

Aggiornare i requisiti funzionali nel file report.md per includere quelli relativi a FlexSim:

  1. Creare il modello 3D del supermercato.
  2. Creare il modello 3D dei prodotti.
  3. Creare il modello iniziale in FlexSim con i rack posizionati correttamente.
  4. Associare il tempo in FlexSim a un servizio API, con il tempo scandito in FlexSim e conservato nel cloud per future consultazioni.

Creare il codice per gestire il display i2c

Con riferimento a "(RF8.4) Utilizzo di un display I2C 16x2 per visualizzare i dati della cassa e le istruzioni operative", è necessario sviluppare il codice su Arduino per gestire il display I2C.

Requisiti

Screenshot 2024-07-16 at 00 41 09
  1. Stato iniziale: La cassa è in standby, visualizza un messaggio di cortesia.
  2. Stato conteggio dello scontrino: Visualizzare le prime 8 lettere del prodotto, il costo del prodotto, la quantità (massimo 2 cifre), e il totale con 4 cifre e 2 decimali.
  3. Stato conferma pagamento: Chiedere all'utente la conferma del pagamento, mostrando il totale dello scontrino. Da questa schermata è possibile ritornare allo stato precedente o procedere con il pagamento.
  4. Stato attesa carta: Il pagamento è richiesto, visualizzare il messaggio di attesa della carta.
  5. Stato pagamento ok: Il pagamento è andato a buon fine, visualizzare un messaggio di ringraziamento per qualche istante.

Inserire il codice all'interno della cartella root/arduino.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.