It is the main microservices of fiap-tech-challenge-restaurant project
app/web
: diretório para os principais pontos de entrada, injeção dependência ou comandos do aplicativo. O subdiretório ‘web’ contém o ponto de entrada principal a API REST.domain/entities
: diretório que contém modelos/entidades de domínio que representam os principais conceitos de negócios.domain/usecases
: diretório que contém Serviços de Domínio ou Use Cases.domain/ports
: diretório que contém ‘interfaces’ ou contratos definidos que os adaptadores devem seguir.adapters/payment
: adaptador para meio de pagamento externo.adapters/delivery
: adaptador para meio de entrega externo.frameworks/rest
: diretório que contém os controllers e manipulador de requisições REST.frameworks/rest/dto
: diretório que contém objetos/modelo de request e response.frameworks/repository
: diretório que contém adaptadores de banco de dados exemplo para PostgreSQL.frameworks/repository/dbo
: diretório que contém objetos/entidades de banco de dados..infra
: diretório que contém arquivos de infrainstrutura.infra/kubernetes
: diretório que contém os manifestos kubernetes.infra/terraform
: diretório que contém os arquivos terraform para provisionar a infra do projetoBoas práticas e padrões usados para resolver os desafios
Na implementação do padrão SAGA optei por usar a estratégia de Coreografia para fazer uso dos seguintes benefícios:
Desacoplamento e Autonomia dos Serviços Para que os serviços fiquem mais independentes uns dos outros e não dependam de um orquestrador central o que adicionaria outro ponto de falha. A ideia é que cada serviço conhece apenas sua própria lógica e como reagir a eventos específicos, permitindo maior autonomia no desenvolvimento e evolução dos serviços.
Escalabilidade Como não há um ponto central de controle, o sistema pode escalar melhor horizontalmente, já que o aumento na carga de trabalho passa ser distribuído entre os serviços, sem sobrecarregar um único orquestrador.
Resiliência A falha de um serviço não impede necessariamente que outros serviços continuem a operar. Cada serviço foi projetado para lidar com falhas de maneira mais isolada, aumentando a resiliência geral do sistema.
Flexibilidade e Evolução do Sistema Adicionar, modificar ou remover serviços é mais fácil e menos impactante, pois não há necessidade de alterar um orquestrador central. Isso tornou a arquitetura mais adaptável a mudanças de requisitos de negócios ou novas funcionalidades. Cada serviço pode ser desenvolvido e implantado de forma independente, o que facilita a adoção de novas tecnologias ou padrões sem impactar o sistema como um todo.
Melhor Alinhamento com Arquiteturas Orientadas a Eventos A coreografia alinhou bem com arquiteturas orientadas a eventos, onde os eventos dirigem o fluxo das operações, facilitando a implementação de arquiteturas reativas e altamente responsivas.
docker-compose
Pré-requisitos: Ter docker, docker-compose e postman
docker-compose up
Health restaurant-api
Health payment-api
Health kitchen-api
Orders/Start New Order
Orders/Add Item
Orders/Confirmation Order
Orders/Send Order to Payment
Payment/Paid by Order Id
Kitchen/Ready
Orders/Sent for Delivery Order
Orders/Delivered Order
Dependencies
Check for go version 1.21.3
go version
Preparing app
git clone [email protected]:fabianogoes/fiap-tech-challenge-restaurant-api.git
cd fiap-tech-challenge-restaurant-api
go mod tidy
docker-compose up -d postgres && go run app/web/main.go
docker-compose up -d
curl --request GET --url http://localhost:8080/health
## response
{"status":"UP"}
Quando a ‘app’ subir será inserido dados necessários para testar a criação de pedidos
Para verificar a lista de produtos pode ser usado a API:
http://localhost:8080/products
Para verificar a lista de clientes pode ser usado a API:
http://localhost:8080/customers
Para verificar a lista de Atendentes pode ser usado a API:
http://localhost:8080/attendants
docker login -u=fabianogoes
docker build -t fabianogoes/restaurant-api:latest .
docker tag fabianogoes/restaurant-api:latest fabianogoes/restaurant-api:latest
docker push fabianogoes/restaurant-api:latest
clear && go test -coverprofile=coverage.out ./... && go tool cover -func=coverage.out