Este projeto foi desenvolvido como parte do desafio Clean Architecture: Listagem de Orders, utilizando os princípios da Clean Architecture para demonstrar o desacoplamento entre regras de negócio e interfaces de entrada.
A aplicação possui dois casos de uso:
- CreateOrderUseCase: responsável pela criação de pedidos.
- ListOrdersUseCase: responsável pela listagem de pedidos.
Esses casos de uso são expostos simultaneamente através de três interfaces de comunicação diferentes:
- REST
- gRPC
- GraphQL
Além disso, a aplicação realiza automaticamente:
- Inicialização do banco de dados via Docker;
- Aplicação das migrations na inicialização;
- Inicialização dos serviços REST, gRPC e GraphQL;
- Espera pelo banco de dados antes de iniciar a aplicação, evitando problemas de race condition.
- Go (Golang)
- Clean Architecture
- MySQL
- RabbitMQ
- REST
- gRPC
- GraphQL
- Docker
- Docker Compose
- golang-migrate
- Google Wire
- gqlgen
- Docker
- Docker Compose
docker compose upNenhum outro comando é necessário.
Ao executar o comando acima:
- O MySQL será iniciado;
- O RabbitMQ será iniciado;
- A aplicação aguardará o banco de dados ficar disponível;
- As migrations serão executadas automaticamente;
- Os serviços REST, gRPC e GraphQL serão iniciados.
Porta:
8000
POST /orderPayload:
{
"id": "123",
"price": 100.0,
"tax": 10.0
}GET /orderExemplo:
curl http://localhost:8000/orderPorta:
8080
Playground:
http://localhost:8080
mutation createOrder{
createOrder(input: {id: "GQL-1", Price: 100.50, Tax: 10.00}){
id,
Price,
Tax
}
}query ListOrders {
listOrders {
id,
Price,
Tax,
FinalPrice
}
}Porta:
50051
Services disponíveis:
- CreateOrder
- ListOrders
- CreateOrderUseCase
- ListOrdersUseCase
- POST /order
- GET /order
- Mutation createOrder
- Query listOrders
- CreateOrder
- ListOrders
Todas as interfaces utilizam os mesmos casos de uso da camada de aplicação, demonstrando o desacoplamento proposto pela Clean Architecture.
O banco de dados é provisionado automaticamente via Docker.
As migrations estão localizadas em:
internal/infra/database/migrations
As migrations são executadas automaticamente durante a inicialização da aplicação.
O projeto contém um arquivo api.http na raiz do projeto com exemplos prontos para:
- Criar Orders via REST
- Listar Orders via REST
| Serviço | Porta |
|---|---|
| REST | 8000 |
| GraphQL | 8080 |
| gRPC | 50051 |
Jacksom Guilherme Novack dos Santos