Aplicação web para controle de receitas, despesas, categorias e metas, com autenticação JWT e API em NestJS.
- Repositório: https://github.com/Caio-Dias02/Gestao-Financeira
- Stack: NestJS, Prisma, PostgreSQL (Docker), JWT, Redis (planejado)
- Visão Geral
- Tecnologias
- Estrutura do projeto
- Como rodar (dev)
- Variáveis de ambiente
- Banco de dados (Prisma)
- Scripts
- Endpoints principais
- Exemplos de uso (curl)
- Testes e lint
- Roadmap
- Backend em NestJS com autenticação JWT.
- Login grava cookie HttpOnly
access_tokene também retorna o token no body para compatibilidade. - CORS habilitado para
http://localhost:3000ehttp://localhost:3001; cookies ativados. - CRUD de usuários e categorias implementados; transações/metas/contas/grupos no roadmap.
- Runtime: Node.js 20+, pnpm
- Backend: NestJS 11, Passport-JWT, class-validator
- ORM: Prisma 6 + PostgreSQL 16 (Docker)
- Cache: Redis (planejado)
- Testes: Jest, Supertest
- Lint/Format: ESLint + Prettier
backend/API NestJSdocs/documentação geralmemory-bank/contexto do projeto (projectbrief, progress, etc.)
Pré-requisitos:
- Node.js 20+
- pnpm (
npm i -g pnpm) - Docker Desktop
Passos:
- Suba o banco
cd backend
docker compose up -d- Instale dependências
pnpm install- Configure o .env
Crie
backend/.env:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/gestao_financeira?schema=public
JWT_SECRET=super-secret
JWT_EXPIRES_IN=1d
# Opcional para futuramente:
# REDIS_URL=redis://localhost:6379- Gere client e rode migrações
pnpm prisma generate
pnpm prisma migrate dev- Inicie o servidor
pnpm run backend
# Porta padrão: 3000DATABASE_URLstring de conexão do PostgreSQLJWT_SECRETsegredo do JWTJWT_EXPIRES_INexpiração do token (ex.: 1d, 12h)REDIS_URLopcional, para cache no dashboard
Entidades principais atuais:
User(id, name, email, password, timestamps)Category(id, name, type INCOME|EXPENSE, color, icon, userId, createdAt)Transaction(id, title, amount decimal(10,2), type INCOME|EXPENSE, description, date, userId, categoryId?, createdAt)
Comandos úteis:
pnpm prisma studio # UI do Prisma
pnpm prisma migrate dev # cria/aplica migrações
pnpm prisma generate # gera clientpnpm run backendinicia em modo watchpnpm run startinicia sem watchpnpm run start:prodroda build produzidopnpm run lintcorrige lintpnpm run testroda testespnpm run test:e2etestes end-to-end
Auth
- POST
/auth/loginbody:{ "email": "...", "password": "..." }- Seta cookie HttpOnly
access_tokene responde{ token: { access_token } }
- Seta cookie HttpOnly
- POST
/auth/logoutlimpa cookie
Users (protegidos por JWT)
- GET
/user/meretorna o usuário autenticado (payload do JWT) - POST
/usercria usuário - GET
/userlista usuários - GET
/user/:id - PATCH
/user/:id - DELETE
/user/:id
Categories (protegidos por JWT)
- POST
/categorycria categoria para o usuário logado - GET
/categorylista categorias do usuário - GET
/category/:id - PATCH
/category/:id - DELETE
/category/:id
Observações:
- Todas as rotas protegidas usam
AuthGuard('jwt'). - O token é lido primeiro do cookie; se ausente, do header
Authorization: Bearer <token>.
Login (gera cookie + retorna token):
curl -i -X POST http://localhost:3000/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"senha"}'Usando cookie retornado para acessar categorias:
# copie o valor de 'set-cookie' do login e substitua abaixo
curl -i http://localhost:3000/category \
-H "Cookie: access_token=SEU_TOKEN_AQUI"Ou usando Bearer:
curl -i http://localhost:3000/category \
-H "Authorization: Bearer SEU_TOKEN_AQUI"Criar categoria:
curl -i -X POST http://localhost:3000/category \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-d '{"name":"Salário","type":"INCOME","color":"#22c55e","icon":"lucide:wallet"}'pnpm run test
pnpm run test:e2e
pnpm run lint- Accounts: CRUD + saldo e transferências
- Transactions: CRUD + filtros de data/tipo/categoria/conta
- Goals: metas por valor/prazo, progresso
- Groups: escopos multiusuário
- Dashboard: agregações com cache Redis
Uso interno/estudo.