Uma API REST robusta para gerenciamento financeiro pessoal, construída com Node.js, Fastify e PostgreSQL. A API oferece funcionalidades completas para controle de transações, categorias, orçamentos, metas financeiras e relatórios detalhados.
- Node.js (>=20) - Runtime JavaScript
- Fastify - Framework web de alta performance
- Prisma - ORM moderno para TypeScript e Node.js
- PostgreSQL - Banco de dados relacional
- Zod - Validação de esquemas TypeScript-first
- Clerk - Plataforma de autenticação completa
- CORS - Controle de acesso entre origens
- date-fns - Biblioteca moderna para manipulação de datas
- uuid - Geração de identificadores únicos
- http-status-codes - Códigos de status HTTP padronizados
- dotenv - Gerenciamento de variáveis de ambiente
- Nodemon - Reinicialização automática do servidor
- ESLint - Linting de código JavaScript
- Docker Compose - Orquestração de containers
api-cash-wise/
├── prisma/
│ ├── migrations/ # Migrações do banco de dados
│ └── schema.prisma # Schema do Prisma
├── src/
│ ├── config/
│ │ ├── envs.js # Configurações de ambiente
│ │ └── swagger.js # Configuração do Swagger
│ ├── controllers/ # Controladores das rotas
│ │ ├── budget.controller.js
│ │ ├── category.controller.js
│ │ ├── goal.controller.js
│ │ ├── report.controller.js
│ │ └── transaction.controller.js
│ ├── libs/
│ │ └── prisma.js # Cliente Prisma
│ ├── middleware/
│ │ └── clerkAuth.js # Middleware de autenticação
│ ├── plugins/
│ │ ├── userId.js # Plugin para extrair userId
│ │ └── zodValidate.js # Plugin de validação Zod
│ ├── repositories/ # Camada de acesso aos dados
│ │ ├── budget.repository.js
│ │ ├── category.repository.js
│ │ ├── goal.repository.js
│ │ └── transaction.repository.js
│ ├── routes/ # Definição das rotas
│ │ ├── budget.route.js
│ │ ├── category.route.js
│ │ ├── goal.route.js
│ │ ├── report.route.js
│ │ ├── transaction.route.js
│ │ └── index.js
│ ├── schemas/ # Esquemas de validação Zod
│ │ ├── budget.schema.js
│ │ ├── category.schema.js
│ │ ├── goal.schema.js
│ │ ├── report.schema.js
│ │ └── transaction.schema.js
│ ├── services/ # Lógica de negócio
│ │ ├── budget.service.js
│ │ ├── category.service.js
│ │ ├── goal.service.js
│ │ ├── report.service.js
│ │ └── transaction.service.js
│ └── utils/ # Utilitários
│ ├── error.js
│ ├── getUserId.js
│ └── zodValidate.js
├── docker-compose.yml # Configuração Docker
├── server.js # Ponto de entrada da aplicação
└── package.json
- Node.js >= 20
- Docker e Docker Compose
- Conta no Clerk para autenticação
git clone <repository-url>
cd api-cash-wisenpm installCrie um arquivo .env na raiz do projeto:
# Database
DATABASE_URL="postgresql://shinodalabs:shinodalabs@localhost:5432/cashwise"
# Clerk Authentication
CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key
CLERK_SECRET_KEY=your_clerk_secret_key
# Server
PORT=8080
NODE_ENV=developmentnpm run docker-upnpm run prisma:migrate# Desenvolvimento
npm run dev
# Produção
npm start{
id: string
userId: string
name: string
type: "INCOME" | "EXPENSE"
color: string
icon: string
createdAt: DateTime
updatedAt: DateTime
}{
id: string
userId: string
type: "INCOME" | "EXPENSE"
description: string
categoryId?: string
date: DateTime
account?: string
amount: number
paid: boolean
createdAt: DateTime
updatedAt: DateTime
}{
id: string
userId: string
categoryId: string
limit: number
date: DateTime
createdAt: DateTime
updatedAt: DateTime
}{
id: string
userId: string
categoryId: string
title: string
description: string
targetAmount: number
currentAmount: number
deadline: DateTime
createdAt: DateTime
updatedAt: DateTime
}A documentação completa da API está disponível através do Swagger UI:
- Desenvolvimento:
http://localhost:8080/docs - Produção:
https://cashwiseapi-hav8m.kinsta.app/docs
A documentação inclui:
- Todos os endpoints disponíveis
- Esquemas de request e response
- Exemplos de uso
- Códigos de status HTTP
- Autenticação necessária
- Criação, listagem, atualização e exclusão de categorias
- Filtros por tipo (INCOME/EXPENSE)
- Paginação e validação de dados
- Gerenciamento completo de transações financeiras
- Importação em lote via dados OFX
- Filtros avançados por data, tipo, categoria
- Busca por descrição e conta
- Paginação com headers informativos
- Criação e controle de orçamentos por categoria
- Cálculo automático de gastos
- Comparação com limites estabelecidos
- Definição de metas financeiras
- Acompanhamento de progresso
- Prazos e valores alvo
- Relatórios mensais de receitas e despesas
- Análise por categorias
- Relatórios de saldo e resumos financeiros
- Filtros por período
A API utiliza o Clerk para autenticação. Todas as rotas (exceto em desenvolvimento) requerem um token JWT válido no header Authorization:
Authorization: Bearer <jwt-token>
200- Sucesso201- Criado com sucesso400- Erro de validação401- Não autorizado404- Não encontrado500- Erro interno do servidor
# Desenvolvimento
npm run dev # Inicia servidor com nodemon
npm run docker-up # Sobe containers Docker
npm run docker-down # Para containers Docker
# Banco de dados
npm run prisma:migrate # Executa migrações
npm run prisma:generate # Gera cliente Prisma
npm run prisma:studio # Interface visual do banco
npm run seed # Popula banco com dados iniciais
# Produção
npm start # Inicia servidor em produção
# Qualidade de código
npm run lint # Executa ESLintA API está configurada para aceitar requisições das seguintes origens:
https://appcashwise.com.brhttps://www.appcashwise.com.brhttps://cashwiseapi-hav8m.kinsta.apphttp://localhost:3000http://127.0.0.1:3000
Todos os endpoints utilizam validação rigorosa com Zod, garantindo:
- Tipos de dados corretos
- Campos obrigatórios
- Formatos válidos (datas, emails, etc.)
- Valores dentro de limites aceitáveis
Endpoints que retornam listas incluem headers de paginação:
x-total-count: Total de registrosx-current-page: Página atualx-per-page: Registros por páginax-total-pages: Total de páginas
O projeto inclui configuração Docker Compose para PostgreSQL:
# Iniciar banco de dados
docker-compose up -d
# Parar e remover volumes
docker-compose down -vA API segue uma arquitetura em camadas bem definida:
- Controllers: Gerenciam requisições HTTP e respostas
- Services: Contêm a lógica de negócio
- Repositories: Camada de acesso aos dados
- Schemas: Validação de entrada com Zod
- Middleware: Autenticação e validações
- Plugins: Funcionalidades reutilizáveis do Fastify
Este projeto está sob a licença ISC.
Desenvolvido com ❤️ para facilitar o controle financeiro pessoal