Servizi
ACMESky
Worker
L'architettura del worker è descritta nella sua sezione apposita. Qui di seguito viene descritto un suo set up d'esempio.
export ZEEBE_ADDRESS="localhost:26500"
export BPMN_FILE="bpmn/acmesky.bpmn"
export PROCESS_ID="Process_User"
export RABBITMQ_URI="amqp://guest:guest@localhost:5672/"
export SENTRY_DSN="<dsn che viene generato da Sentry>"
export DATABASE_DSN="host=host user=user password=pass dbname=acmesky port=5432"
export OFFER_VALIDATION_TIME=24
export PRONTOGRAM_ENDPOINT=http://prontogram:8000/api
export BANK_ENDPOINT=http://bankservice-api:8080
export BANK_PAYMENT_ENDPOINT=http://http://localhost:9281/?id=
export BANK_CALLBACK=http://acmesky-api:8080`/v1/offers/pay
export BANK_TOKEN=token
export GEODISTANCE_API=acmesky-geodistance:50051
Una tabella airlines
con una sola compagnia aerea può essere:
id | created_at | name | login_username | login_password | endpoint
----+------------+---------+----------------+----------------+-----------------------------------
1 | | WizzAir | wizzadmin | pass | http://airlineservice-api:8080`/v1
Una tabella rents
con una sola compagnia di rent può essere:
id | created_at | name | latitude | longitude | endpoint
----+------------+------+------------+------------+---------------------------------------------
1 | | Uber | 37.4844103 | 15.0729718 | http://rent-leonardo:8081/uber-acmesky.wsdl
È possibile fare un deploy del worker e di Camunda Platform usando docker-compose presente nella cartella del codice sorgente.
$ docker build -t acmesky-workers .
$ git clone git@github.com:acme-sky/workers.git
$ docker compose up
Se non viene usato Docker, il servizio può essere eseguito con
$ go run main.go
Backend
L'api (REST) del backend di AcmeSky, tramite gli handlers sotto descritti, permette l'interazione con l'intero backend del sistema. Comunica con i workers e con gli altri servizi tramite api, permette l'interazione con i database e con il message broker.
L'api, scritta in Go,è presente alla seguente repository Github.
AvailableFlight Handlers
AvailableFlightHandlerGet
- Endpoint:
/v1/available-flights/
- Method: GET
- Description: Recupera tutti i voli disponibili. Se l'utente è un amministratore, vengono restituiti tutti i voli. Altrimenti, vengono restituiti solo i voli relativi all'utente.
- Responses: - 200: Lista dei voli disponibili. - 400: Utente non definito. - 404: Utente non trovato.
AvailableFlightHandlerGetId
- Endpoint:
/v1/available-flights/{availableFlightId}/
- Method: GET
- Description: Recupera un volo disponibile tramite il suo ID.
- Responses: - 200: Dati del volo disponibile. - 400: Utente non definito. - 404: Volo disponibile o utente non trovato. - 401: Accesso non autorizzato.
Interest Handlers
InterestHandlerGet
- Endpoint:
/v1/interests/
- Method: GET
- Description: Recupera tutti gli interessi. Se l'utente è un amministratore, vengono restituiti tutti gli interessi. Altrimenti, vengono restituiti solo gli interessi relativi all'utente.
- Responses: - 200: Lista degli interessi. - 400: Utente non definito. - 404: Utente non trovato.
InterestHandlerPost
- Endpoint:
/v1/interests/filter/
- Method: POST
- Description: Crea un nuovo interesse basato sull'input JSON della richiesta.
- Responses: - 201: Interesse creato. - 400: Utente non definito o input non valido.
InterestHandlerGetId
- Endpoint:
/v1/interests/{interestId}/
- Method: GET
- Description: Recupera un interesse tramite il suo ID.
- Responses: - 200: Dati dell'interesse. - 400: Utente non definito. - 404: Interesse o utente non trovato. - 401: Accesso non autorizzato.
InterestHandlerDelete
- Endpoint:
/v1/interests/{interestId}/
- Method: DELETE
- Description: Elimina un interesse tramite il suo ID.
- Responses: - 204: Interesse eliminato. - 400: Utente non definito. - 404: Interesse o utente non trovato. - 401: Accesso non autorizzato.
Invoice Handlers
InvoiceHandlerGet
- Endpoint:
/v1/invoices/
- Method: GET
- Description: Recupera tutte le fatture. Se l'utente è un amministratore, vengono restituite tutte le fatture. Altrimenti, vengono restituite solo le fatture relative all'utente.
- Responses: - 200: Lista delle fatture. - 400: Utente non definito. - 404: Utente non trovato.
InvoiceHandlerGetId
- Endpoint:
/v1/invoices/{invoiceId}/
- Method: GET
- Description: Recupera una fattura tramite il suo ID.
- Responses: - 200: Dati della fattura. - 400: Utente non definito. - 404: Fattura o utente non trovato. - 401: Accesso non autorizzato.
Journey Handlers
JourneyHandlerGet
- Endpoint:
/v1/journeys/
- Method: GET
- Description: Recupera tutti i viaggi. Se l'utente è un amministratore, vengono restituiti tutti i viaggi. Altrimenti, vengono restituiti solo i viaggi relativi all'utente.
- Responses: - 200: Lista dei viaggi. - 400: Utente non definito. - 404: Utente non trovato.
JourneyHandlerGetId
- Endpoint:
/v1/journeys/{journeyId}/
- Method: GET
- Description: Recupera un viaggio tramite il suo ID.
- Responses: - 200: Dati del viaggio. - 400: Utente non definito. - 404: Viaggio o utente non trovato. - 401: Accesso non autorizzato.
Login Handlers
LoginHandler
- Endpoint:
/v1/login/
- Method: POST
- Description: - Autentica un utente verificando il suo nome utente e password. - Le password sono memorizzate come hash SHA256 nel database. - Se l'autenticazione ha successo, viene generato e restituito all'utente un JWT (JSON Web Token) per effettuare richieste autenticate.
- Responses: - 200 OK in caso di login riuscito con JWT e ID utente. - 400 Bad Request o 404 Not Found in caso di fallimento.
Offer Handlers
OfferHandlerGet
- Endpoint:
/v1/offers/
- Method: GET
- Description: - Recupera le offerte dal database in base al ruolo dell'utente (amministratore o utente normale). - Gli amministratori ricevono tutte le offerte, mentre gli utenti normali ricevono solo le proprie.
- Response: - 200 OK con l'elenco delle offerte e il conteggio.
OfferHandlerGetId
- Endpoint:
/v1/offers/{offerId}/
- Method: GET
- Description: - Recupera i dettagli di un'offerta specifica dal database. - Solo il proprietario dell'offerta o un amministratore possono accedere ai dettagli dell'offerta.
- Response: - 200 OK con i dettagli dell'offerta. - 404 Not Found o 401 Unauthorized se l'offerta non viene trovata o l'utente non è autorizzato.
OfferConfirmHandlerPost
- Endpoint:
/v1/offers/confirm/
- Method: POST
- Description: - Convalida il token dell'offerta fornito e l'ID utente. - Invia un messaggio per confermare l'offerta.
- Response: - 200 OK in caso di conferma riuscita. - 400 Bad Request o 404 Not Found in caso di fallimento.
OfferHandlerPay
- Endpoint:
/v1/offers/{offerId}/pay/
- Method: POST
- Description: - Elabora il pagamento per un'offerta specifica identificata dal suo ID. - Invia un messaggio indicando lo stato del pagamento.
- Response: - 200 OK in caso di pagamento riuscito. - 404 Not Found in caso di fallimento.
OfferHandlerLastMinute
- Endpoint:
/v1/offers/last-minute/
- Method: POST
- Description: - Elabora un'offerta dell'ultimo minuto inviando le informazioni pertinenti come messaggio.
- Response: - 200 OK in caso di elaborazione riuscita. - 400 Bad Request in caso di fallimento.
Signup Handlers
SignupHandler
- Endpoint:
/v1/signup/
- Method: POST
- Description: - Crea un nuovo account utente. - Convalida i dati di input, assicurando che non ci siano nomi utente o email duplicati e che il formato dell'email sia corretto.
- Response: - 201 Created in caso di registrazione riuscita con i dettagli dell'utente. - 400 Bad Request in caso di fallimento.
User Handlers
UserHandlerGet
- Endpoint:
/v1/users/
- Method: GET
- Description: - Recupera tutti gli account utente dal database, escludendo le password.
- Response: - 200 OK con l'elenco degli utenti e il conteggio.
UserHandlerGetId
- Endpoint:
/v1/users/{userId}/
- Method: GET
- Description: - Recupera i dettagli di un utente specifico dal database. - Solo l'utente stesso o un amministratore possono accedere ai dettagli dell'utente.
- Response: - 200 OK con i dettagli dell'utente. - 404 Not Found o 400 Bad Request se l'utente non viene trovato o il richiedente non è autorizzato.
UserHandlerPut
- Endpoint:
/v1/users/{userId}/
- Method: PUT
- Description: - Permette a un utente di aggiornare i dettagli del proprio account. - Solo l'utente stesso o un amministratore possono eseguire l'aggiornamento.
- Response: - 200 OK in caso di aggiornamento riuscito con i dettagli dell'utente aggiornati. - 404 Not Found o 400 Bad Request se l'utente non viene trovato o il richiedente non è autorizzato.
Frontend
Il Frontend del progetto Acmesky è sviluppato utilizzando Next.js, una scelta che garantisce facilità, modularità e un'integrazione fluida con il resto del sistema. Grazie alla sua struttura modulare, Next.js permette di costruire componenti riutilizzabili e facilmente manutenibili, semplificando l'aggiornamento e l'espansione delle funzionalità. Le pagine principali di Acmesky evidenziano le caratteristiche distintive del progetto: la home page infatti offre una panoramica intuitiva e veloce delle funzioni chiave usufruibili dall'utente. Il design è pensato per essere intuibile e reattivo, garantendo un'esperienza utente fluida su qualsiasi dispositivo. L'interfaccia semplice e pulita assicura che gli utenti possano navigare facilmente tra le diverse sezioni, trovando rapidamente le informazioni di cui hanno bisogno.
- Dashboard: contiene i links alle diverse sezioni e features del sito, oltre ad un recap delle informazioni dell'utente.
- Add a new Interest: permette all'untente di aggiungere un interesse per un futuro viaggio.
- My interests: permette di visualizzare gli interessi salvati.
- Journeys: permette di visualizzare i journeys creati da AcmeSky in base agli interessi dell'utente.
- Offers: permette di visualizzare / riscattare le offerte create da AcmeSky per l'utente.
- Invoices: permette di visualizzare le ricevute e i relativi journeys dell'utente, oltre alle eventuali informazioni per il servizio premium.
Esterni
Qui di seguito sono presenti i collegamenti alle pagine per singolo servizio esterno. Viene illustrato il loro set up e il link al codice sorgente.
-
Airline. Usato come gestore di una compagnia aerea.
-
Bank. Usato come gateway di un servizio bancario.
-
Rent. Usato per gestire le compagnie di taxi.
-
Geodistance. Usato per ritrovare la distanza in metri tra due punti nello spazio.
-
Prontogram. Usato come sistema di messaggistica.