API REST de uma loja virtual construída com arquitetura de microserviços, utilizando Node.js, TypeScript, Express, PostgreSQL, Nginx e Docker.
- Visão Geral
- Arquitetura
- Tecnologias
- Serviços
- Fluxo de Autenticação
- Fluxo de Pedidos
- Estrutura de Pastas
- Variáveis de Ambiente
- Como Rodar
- Rotas da API
Este projeto é uma API de e-commerce construída com foco em microserviços independentes, onde cada domínio da aplicação é isolado em seu próprio serviço com responsabilidade única.
O Nginx atua como proxy reverso e único ponto de entrada da aplicação, roteando as requisições para os serviços corretos. Os serviços se comunicam entre si via HTTP interno dentro da rede Docker.
Internet
↓
Nginx :80 (único ponto de entrada)
↓
┌─────────────────────────────────────────────┐
│ Rede interna Docker │
│ │
│ auth-service :3001 │
│ user-service :3002 │
│ product-service :3003 │
│ order-service :3004 │
│ payment-service :3005 │
│ postgres :5432 │
└─────────────────────────────────────────────┘
| Tecnologia | Uso |
|---|---|
| Node.js + TypeScript | Runtime e linguagem de cada serviço |
| Express | Framework HTTP dos serviços |
| PostgreSQL | Banco de dados relacional |
| Nginx | Proxy reverso / API Gateway |
| Docker + Docker Compose | Orquestração dos containers |
| JWT | Autenticação stateless entre serviços |
| pnpm | Gerenciador de pacotes |
Responsável pelo registro e login de usuários. Gera e valida tokens JWT. Se comunica com o user-service via HTTP interno para buscar e criar usuários.
Gerencia os dados dos usuários. Expõe endpoints internos consumidos pelo auth-service e endpoints externos para gerenciamento de perfil.
Gerencia o catálogo de produtos da loja. Controla estoque, categorias e listagens.
Gerencia a criação e o ciclo de vida dos pedidos. Se comunica com product-service para verificar estoque e com payment-service para processar o pagamento.
Responsável pelo processamento de pagamentos. Recebe solicitações do order-service e atualiza o status do pedido.
Cliente → POST /api/auth/register
↓
auth-service recebe (name, email, password)
↓
chama user-service → GET /users/findByEmail
↓
se não existir → POST /users (cria usuário)
↓
gera JWT e retorna ao cliente
Cliente → POST /api/auth/login
↓
auth-service recebe (email, password)
↓
chama user-service → GET /users/findByEmail
↓
verifica senha com bcrypt
↓
gera JWT e retorna ao cliente
Todas as rotas fora de /api/auth exigem o header:
Authorization: Bearer <token>
O middleware authGuard valida o token antes de chegar no controller.
Cliente → POST /api/orders
↓
order-service cria o pedido
↓
chama product-service → verifica estoque
↓
chama payment-service → processa pagamento
↓
payment-service retorna status
↓
order-service atualiza o pedido e retorna ao cliente
store-api/
├── docker-compose.yml
├── .env
├── .gitignore
├── README.md
├── LICENSE
│
├── nginx/
│ ├── Dockerfile
│ └── nginx.conf
│
└── services/
├── auth-service/
│ ├── Dockerfile
│ ├── package.json
│ ├── tsconfig.json
│ └── src/
│ ├── server.ts
│ ├── routes/
│ ├── controllers/
│ ├── models/
│ ├── middlewares/
│ ├── config/
│ └── utils/
│
├── user-service/
├── product-service/
├── order-service/
└── payment-service/
(mesma estrutura interna do auth-service)
Crie um arquivo .env na raiz do projeto:
DB_USER=admin
DB_PASS=senha123
DB_NAME=store
DB_HOST=postgres
DB_PORT=5432
JWT_SECRET=sua_chave_secreta_aqui
⚠️ Nunca suba o.envpara o GitHub. Ele já está no.gitignore.
- Docker Desktop instalado e rodando
docker-compose up --builddocker-compose up --build -ddocker-compose downdocker-compose down -vdocker-compose logs -f auth-serviceTodas as rotas são acessadas via http://localhost.
| Método | Rota | Descrição | Auth |
|---|---|---|---|
| POST | /api/auth/register |
Cadastro de usuário | ❌ |
| POST | /api/auth/login |
Login e geração de JWT | ❌ |
| Método | Rota | Descrição | Auth |
|---|---|---|---|
| GET | /api/users/me |
Dados do usuário logado | ✅ |
| PUT | /api/users/me |
Atualizar perfil | ✅ |
| Método | Rota | Descrição | Auth |
|---|---|---|---|
| GET | /api/products |
Listar produtos | ❌ |
| GET | /api/products/:id |
Buscar produto | ❌ |
| POST | /api/products |
Criar produto | ✅ |
| PUT | /api/products/:id |
Atualizar produto | ✅ |
| DELETE | /api/products/:id |
Deletar produto | ✅ |
| Método | Rota | Descrição | Auth |
|---|---|---|---|
| GET | /api/orders |
Listar pedidos do usuário | ✅ |
| GET | /api/orders/:id |
Buscar pedido | ✅ |
| POST | /api/orders |
Criar pedido | ✅ |
| Método | Rota | Descrição | Auth |
|---|---|---|---|
| POST | /api/payments |
Processar pagamento | ✅ |
| GET | /api/payments/:orderId |
Status do pagamento | ✅ |
Feito para fins de estudo e evolução em arquitetura de microserviços com Node.js.