API robusta em Go para sistema de gestão financeira pessoal, com autenticação via Supabase, CRUD completo de transações, categorias, metas e orçamentos.
- Go 1.23+ - Linguagem de programação
- Gin - Framework web HTTP
- PostgreSQL - Banco de dados (via Supabase)
- Supabase - Autenticação e banco de dados
- Docker - Containerização
- Swagger - Documentação da API
- Go 1.23 ou superior
- PostgreSQL (ou conta Supabase)
- Docker e Docker Compose (opcional)
- Make (opcional, mas recomendado)
cd backend-goCopie o arquivo .env.example para .env:
cp .env.example .envEdite o arquivo .env com suas credenciais do Supabase:
PORT=8080
ENV=development
# Supabase Configuration
SUPABASE_URL=https://your-project-ref.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
SUPABASE_JWT_SECRET=your-jwt-secret
# Database Configuration
DB_HOST=db.your-project-ref.supabase.co
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your-database-password
DB_NAME=postgres
DB_SSLMODE=require
# CORS
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3001go mod downloadou usando Make:
make installExecute os scripts SQL da pasta ../fintrackdev/src/scripts/ no seu banco de dados Supabase.
go run cmd/api/main.goou usando Make:
make run# Instale o Air
go install github.com/cosmtrek/air@latest
# Execute
airou:
make dev# Build
make build
# Execute o binário
./bin/apidocker build -t fintrack-api:latest .ou:
make docker-builddocker-compose up -dou:
make docker-upmake docker-downA documentação completa da API está disponível em:
- Documentação detalhada: docs/API.md
- Postman Collection: docs/FinTrack-API.postman_collection.json
GET /health- Verifica o status da API
GET /api/v1/dashboard/stats- Estatísticas geraisGET /api/v1/dashboard/expenses-by-category- Gastos por categoriaGET /api/v1/dashboard/monthly-data- Dados mensaisGET /api/v1/dashboard/daily-data- Dados diáriosGET /api/v1/dashboard/recent-transactions- Transações recentes
POST /api/v1/categories- Criar categoriaGET /api/v1/categories- Listar categoriasGET /api/v1/categories/:id- Buscar categoriaPUT /api/v1/categories/:id- Atualizar categoriaDELETE /api/v1/categories/:id- Deletar categoria
POST /api/v1/transactions- Criar transaçãoGET /api/v1/transactions- Listar transações (com filtros e paginação)GET /api/v1/transactions/:id- Buscar transaçãoPUT /api/v1/transactions/:id- Atualizar transaçãoDELETE /api/v1/transactions/:id- Deletar transação
POST /api/v1/goals- Criar metaGET /api/v1/goals- Listar metasGET /api/v1/goals/:id- Buscar metaPUT /api/v1/goals/:id- Atualizar metaDELETE /api/v1/goals/:id- Deletar metaPOST /api/v1/goals/:id/contribute- Contribuir para meta
POST /api/v1/budgets- Criar orçamentoGET /api/v1/budgets- Listar orçamentosGET /api/v1/budgets/with-spent- Orçamentos com valores gastosGET /api/v1/budgets/:id- Buscar orçamentoPUT /api/v1/budgets/:id- Atualizar orçamentoDELETE /api/v1/budgets/:id- Deletar orçamento
A API utiliza JWT tokens do Supabase. Todas as rotas protegidas requerem o header:
Authorization: Bearer <seu-token-jwt>
O token é obtido através do login no Supabase (frontend).
# Executar testes
make test
# Testes com coverage
make test-coveragebackend-go/
├── cmd/
│ └── api/
│ └── main.go # Entry point da aplicação
├── internal/
│ ├── config/
│ │ └── config.go # Configurações da aplicação
│ ├── handler/
│ │ ├── category_handler.go # Handlers de categorias
│ │ ├── transaction_handler.go
│ │ ├── goal_handler.go
│ │ ├── budget_handler.go
│ │ ├── dashboard_handler.go
│ │ └── health_handler.go
│ ├── middleware/
│ │ ├── auth.go # Middleware de autenticação
│ │ ├── logger.go
│ │ └── error.go
│ ├── models/
│ │ ├── category.go # Modelos de dados
│ │ ├── transaction.go
│ │ ├── goal.go
│ │ ├── budget.go
│ │ ├── dashboard.go
│ │ ├── user.go
│ │ └── response.go
│ └── repository/
│ ├── category_repository.go # Camada de acesso a dados
│ ├── transaction_repository.go
│ ├── goal_repository.go
│ ├── budget_repository.go
│ └── dashboard_repository.go
├── docs/ # Documentação
├── .env.example # Exemplo de variáveis de ambiente
├── .gitignore
├── Dockerfile
├── docker-compose.yml
├── go.mod
├── go.sum
├── Makefile
└── README.md
make help # Mostra todos os comandos disponíveis
make install # Instala dependências
make build # Compila a aplicação
make run # Executa a aplicação
make dev # Executa com hot reload
make test # Executa testes
make test-coverage # Testes com coverage
make lint # Executa linter
make fmt # Formata código
make clean # Limpa arquivos de build
make docker-build # Build da imagem Docker
make docker-up # Inicia containers
make docker-down # Para containersO frontend (Next.js) deve fazer requisições para esta API. Configure a URL base no frontend:
// No seu arquivo de configuração do frontend
const API_BASE_URL =
process.env.NEXT_PUBLIC_API_URL || "http://localhost:8080/api/v1";Exemplo de requisição do frontend:
const response = await fetch(`${API_BASE_URL}/transactions`, {
headers: {
Authorization: `Bearer ${supabaseToken}`,
"Content-Type": "application/json",
},
});A API inclui:
- Health check endpoint
- Logging de todas as requisições
- Tratamento de erros centralizado
- CORS configurável
- Connection pooling no banco de dados
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT.
Gildácio Lopes
Se encontrar algum problema, por favor abra uma issue no GitHub.
Status: ✅ Em desenvolvimento ativo