Sistema Profissional de Controle Financeiro
API REST com arquitetura MVC, autenticação JWT e persistência de dados.
api/
├── src/
│ ├── server.js # Servidor principal Express
│ ├── config/
│ │ └── database.js # Configuração MongoDB
│ ├── routes/ # Definição de rotas
│ │ ├── auth.routes.js # Rotas de autenticação
│ │ ├── entries.routes.js # Rotas de lançamentos
│ │ └── user.routes.js # Rotas de usuário
│ ├── controllers/ # Controladores (lógica de requisição)
│ │ ├── auth.controller.js
│ │ ├── entries.controller.js
│ │ └── user.controller.js
│ ├── services/ # Serviços (lógica de negócio)
│ │ ├── auth.service.js
│ │ ├── entries.service.js
│ │ └── user.service.js
│ ├── models/ # Schemas Mongoose (NoSQL)
│ │ ├── User.model.js # Schema de usuários
│ │ └── Entry.model.js # Schema de lançamentos
│ ├── middlewares/ # Middlewares
│ │ └── auth.middleware.js # Verificação JWT
│ └── validators/ # Validadores
│ └── entry.validator.js
├── package.json
├── Dockerfile
├── docker-compose.yml # API + MongoDB
├── .env.example # Template variáveis
└── README.md
Pré-requisitos:
- Node.js 18+
- MongoDB rodando localmente (porta 27017)
cd api
npm install
# Configure as variáveis de ambiente
cp .env.example .env
# Inicie o servidor
npm startA API estará disponível em: http://localhost:3000
cd api
docker-compose up --build -dIsso vai subir 2 containers:
cashflow-mongodb: Banco de dados NoSQLcashflow-api: Servidor Node.js
Ver logs:
docker-compose logs -f apiParar:
docker-compose downLimpar volumes (apaga dados):
docker-compose down -vTodas as rotas (exceto /api/health, /api/auth/login e /api/auth/register) exigem autenticação via JWT.
Header obrigatório:
Authorization: Bearer <seu_token>
Credenciais padrão:
- Usuário:
admin - Senha:
admin123
| Método | Rota | Descrição |
|---|---|---|
| GET | /api/health |
Status da API |
| POST | /api/auth/login |
Login (obter token) |
| POST | /api/auth/register |
Registrar usuário |
| Método | Rota | Descrição |
|---|---|---|
| GET | /api/user/me |
Perfil do usuário logado |
| GET | /api/entries |
Listar lançamentos (filtros) |
| GET | /api/entries/:id |
Buscar lançamento por ID |
| POST | /api/entries |
Criar novo lançamento |
| PUT | /api/entries/:id |
Atualizar lançamento |
| DELETE | /api/entries/:id |
Excluir lançamento |
| DELETE | /api/entries |
Excluir todos os lançamentos |
| POST | /api/entries/seed |
Inserir dados demo |
POST http://localhost:3000/api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123"
}Resposta:
{
"ok": true,
"token": "eyJhbGciOiJIUzI1NiIs...",
"user": {
"id": "...",
"username": "admin",
"name": "Administrador"
}
}POST http://localhost:3000/api/entries
Authorization: Bearer <token>
Content-Type: application/json
{
"type": "gasto",
"amount": 150.50,
"description": "Jantar Especial",
"cardBrand": "Mastercard"
}GET http://localhost:3000/api/entries?type=gasto&q=jantar&limit=10
Authorization: Bearer <token>POST http://localhost:3000/api/auth/register
Content-Type: application/json
{
"username": "maria",
"password": "senha123",
"name": "Maria Silva"
}Visa | Mastercard | Elo | American Express | Hipercard | Discover | Diners | Outra
- Helmet.js: Proteção contra vulnerabilidades comuns
- CORS: Configurado para aceitar requisições de qualquer origem
- JWT: Tokens criptografados com validade de 7 dias
- Bcrypt: Senhas hasheadas com salt de 10 rounds
- Suba a pasta
/apipara seu servidor - Configure as variáveis de ambiente (
.env) - Execute
docker-compose up --build -d
- Aponte o deploy para a pasta
/api - Configure
PORT=3000eJWT_SECRETnas variáveis - Deploy automático!
Crie um arquivo .env baseado no .env.example:
PORT=3000
NODE_ENV=production
MONGODB_URI=mongodb://localhost:27017/cashflow
JWT_SECRET=sua-chave-super-secreta-mude-isso
JWT_EXPIRES_IN=7d- Node.js + Express
- MongoDB + Mongoose (NoSQL Database)
- JWT para autenticação
- Bcrypt para criptografia de senhas
- Helmet para segurança HTTP
- Morgan para logs de requisições
- Arquitetura MVC profissional