Uma robusta infraestrutura de e-commerce baseada em Microserviços, projetada para ser escalável, resiliente e orientada a eventos. Este projeto demonstra a implementação de padrões modernos de arquitetura distribuída, utilizando comunicação síncrona (HTTP/REST) e assíncrona (RabbitMQ).
O projeto é composto por 5 microserviços independentes, cada um com sua própria responsabilidade e isolamento de dados.
- Síncrona (REST): Utilizada para operações imediatas, como autenticação e consulta de perfil.
- Assíncrona (Event-Driven): Utilizada para o fluxo de pedidos e pagamentos via RabbitMQ, garantindo que o sistema seja resiliente a falhas temporárias em serviços específicos.
- API Gateway (Nginx): Atua como o único ponto de entrada para o mundo exterior, roteando o tráfego e protegendo os serviços internos.
graph TD
Client[Cliente / Frontend] -->|HTTP| Nginx{Nginx API Gateway}
subgraph "Internal Network"
Nginx -->|/api/auth| Auth[Auth Service]
Nginx -->|/api/users| User[User Service]
Nginx -->|/api/products| Product[Product Service]
Nginx -->|/api/orders| Order[Order Service]
Nginx -->|/api/payments| Payment[Payment Service]
Auth <-->|Internal HTTP| User
Order -->|Internal HTTP| Product
Order -->|Publish order_created| RabbitMQ((RabbitMQ))
RabbitMQ -->|Consume order_created| Payment
Payment -->|Publish payment_finished| RabbitMQ
RabbitMQ -->|Consume payment_finished| Order
Auth & User & Product & Order & Payment --- DB[(PostgreSQL)]
end
Responsável pelo ciclo de vida de autenticação. Realiza o registro de novos usuários (comunicando-se com o user-service) e gera tokens JWT para sessões seguras.
Gerencia o domínio de usuários e perfis. Fornece dados essenciais para o serviço de autenticação e permite que os usuários gerenciem suas informações pessoais.
O catálogo central da aplicação. Gerencia o inventário, preços e detalhes dos produtos disponíveis para venda.
Orquestrador do processo de compra. Cria pedidos, valida estoque via HTTP e inicia o fluxo de pagamento postando eventos na fila do RabbitMQ.
Processador de pagamentos (Simulação). Escuta novos pedidos, processa a transação e notifica o order-service sobre o sucesso ou falha do pagamento de forma assíncrona.
- Runtime: Node.js v18+
- Linguagem: TypeScript
- Framework: Express.js
- Banco de Dados: PostgreSQL (Sequelize ORM)
- Mensageria: RabbitMQ (amqplib)
- Proxy/Gateway: Nginx
- Containerização: Docker & Docker Compose
- Package Manager: pnpm (Monorepo/Workspaces)
- Docker e Docker Compose instalados.
-
Clone o repositório:
git clone https://github.com/Peixotim/store-api.git cd store-api -
Configure as Variáveis de Ambiente: Crie um arquivo
.envna raiz seguindo o modelo:DB_USER=admin DB_PASSWORD=admin DB_NAME=store DB_HOST=postgres DB_PORT=5432 JWT_SECRET=super_secret_key_123 AMQP_URL=amqp://guest:guest@rabbitmq:5672
-
Inicie a infraestrutura:
docker-compose up --build
A API estará disponível em http://localhost.
| Serviço | Endpoint | Método | Descrição |
|---|---|---|---|
| Auth | /api/auth/login |
POST | Autenticação e retorno de Token JWT |
| User | /api/users/me |
GET | Perfil do usuário logado |
| Product | /api/products |
GET | Listagem de produtos |
| Order | /api/orders |
POST | Criação de um novo pedido |
| Payment | /api/payments |
POST | Consulta manual de transações |
Pedro Peixoto
Este projeto foi desenvolvido com fins educacionais para explorar os desafios e soluções de sistemas distribuídos.