Zaldo (do latim Saldo com um toque moderno) é um Bot de Finanças Pessoais para Telegram de alto desempenho, desenhado para simplificar o registro de gastos e receitas através de uma interface de chat intuitiva, alimentado por uma API REST robusta.
- Funcionalidades
- Tech Stack & Arquitetura
- Como Executar
- Configuração (.env)
- Documentação da API
- Estrutura do Projeto
O Zaldo permite gerenciar suas finanças sem sair do Telegram.
- 🤖 Bot Interativo: Navegação via Menus e Botões (Inline Keyboards).
- 🔐 Segurança: Autenticação de usuários e proteção de dados.
- 💰 Gestão de Carteiras: Crie múltiplas carteiras (Ex: Nubank, Cofre, Investimentos) e gerencie saldos individuais.
- 📝 Transações Rápidas:
- Registro de Despesas e Receitas.
- Classificação por Categorias (Alimentação, Lazer, Transporte, etc.).
- Datas personalizadas (hoje, ontem ou data específica).
- ⚡ Performance: Cache de sessão de usuário utilizando Redis (Cache-Aside Pattern) para respostas imediatas.
O projeto foi desenhado seguindo as melhores práticas de engenharia de software para garantir manutenibilidade e desacoplamento.
- Linguagem: Java 25
- Framework: Spring Boot 4.x
- Arquitetura: Hexagonal (Ports & Adapters)
- Banco de Dados: PostgreSQL 18.1
- Cache & Sessão: Redis 8.4
- Containerização: Docker & Docker Compose
- Integração: Telegram Bot API
- API Client: Bruno (Coleção inclusa em
/zaldo)
O sistema utiliza integridade referencial robusta com ON DELETE CASCADE configurado via JPA para garantir consistência entre Usuários, Carteiras e Transações.
- Docker e Docker Compose instalados.
- Um Token de Bot do Telegram (fale com o @BotFather).
A maneira mais fácil de rodar o Zaldo é via Docker, pois ele sobe o Banco, o Redis e a API automaticamente.
-
Clone o repositório:
git clone https://github.com/williansilva51/zaldo.git cd zaldo -
Configure as Variáveis de Ambiente: Crie um arquivo
.envna raiz (baseado no.env-example):cp .env-example .env
Edite o arquivo e insira seu
TOKEN_TELEGRAM_BOT. -
Execute com Docker Compose:
docker compose up --build
-
Acesse:
- A API estará rodando em:
http://localhost:8080 - O Bot estará ativo no seu Telegram.
- A API estará rodando em:
O sistema é configurado via variáveis de ambiente para facilitar o deploy em contêineres.
| Variável | Descrição | Padrão (Dev) |
|---|---|---|
TOKEN_TELEGRAM_BOT |
Token fornecido pelo BotFather | Obrigatório |
TOKEN_JWT |
Segredo para assinatura de Tokens | dev-secret... |
DB_NAME |
Nome do banco PostgreSQL | zaldo |
DB_USER |
Usuário do banco | admin |
DB_PASSWORD |
Senha do banco | admin |
SPRING_DATA_REDIS_HOST |
Host do Redis | redis (no docker) |
O projeto possui integração com Scalar para exploração dos endpoints REST.
Após iniciar a aplicação, acesse: 👉 http://localhost:8080/scalar
O código segue rigorosamente a Arquitetura Hexagonal, isolando o domínio de dependências externas.
zaldo-api/
├── core/ # 🟢 O Coração (Regras de Negócio Puras)
│ ├── domain/ # Entidades (Transaction, User, Wallet)
│ └── enums/ # Categorias e Tipos
├── application/ # 🟡 Casos de Uso (Orquestração)
│ ├── ports/ # Interfaces que definem Entradas e Saídas
│ └── service/ # Implementação dos Casos de Uso
└── infrastructure/ # 🔴 O Mundo Externo (Frameworks & IO)
├── adapters/
│ ├── in/ # Quem chama a aplicação (Web Controller, Telegram Handler)
│ └── out/ # Quem a aplicação chama (Postgres Repository, Redis)
└── config/ # Configurações do Spring (Security, Scalar, Beans)
