API REST completa para gerenciamento financeiro pessoal, desenvolvida em Java com arquitetura em camadas.
- Sobre o Projeto
- Tecnologias
- Arquitetura
- Pré-requisitos
- Configuração
- Endpoints da API
- Autenticação
- Estrutura de Resposta
- Tratamento de Erros
- Exemplos de Uso
Cofry é uma API REST para gerenciamento financeiro pessoal que oferece funcionalidades completas de:
- 💰 Gestão de Contas: Múltiplas contas bancárias com controle de saldo
- 💳 Cartões: Gerenciamento de cartões de crédito/débito
- 📊 Transações: Histórico completo de transações financeiras
- 💸 PIX: Transferências entre usuários via CPF
- 📄 Boletos: Emissão e pagamento de boletos bancários (DDA)
- 📈 Investimentos: Gestão de carteira de investimentos
- 🎯 Metas: Metas de poupança e orçamentos
- 👤 Usuários: Sistema completo de usuários com planos de assinatura
- Java 21
- Maven - Gerenciamento de dependências
- PostgreSQL - Banco de dados (AWS RDS)
- JDBC - Acesso ao banco de dados
- JPA/Hibernate - ORM
- Servlets - API REST
- Tomcat 10 - Servidor de aplicação
- Gson - Serialização JSON
- Docker - Containerização
- GitHub Actions - CI/CD
A API segue o padrão de arquitetura em camadas:
┌─────────────────────────────────────┐
│ Controller (Servlets) │ ← Endpoints REST
├─────────────────────────────────────┤
│ Service (Lógica) │ ← Regras de negócio
├─────────────────────────────────────┤
│ DAO (Data Access) │ ← Acesso ao banco
├─────────────────────────────────────┤
│ Database (PostgreSQL) │ ← Persistência
└─────────────────────────────────────┘
src/main/java/org/example/
├── controller/ # Servlets (endpoints REST)
├── service/ # Lógica de negócio
├── dao/ # Data Access Objects
├── model/ # Entidades JPA
├── dto/ # Data Transfer Objects
├── persistence/ # Gerenciamento de conexão
├── utils/ # Utilitários (validação, criptografia)
└── config/ # Configurações (CORS, filtros)
- Java 21 ou superior
- Maven 3.6+
- PostgreSQL 12+ (ou acesso ao AWS RDS)
- Tomcat 9 ou superior
- Git
git clone https://github.com/seu-usuario/cofry-backend.git
cd cofry-backendCrie um arquivo .env ou configure as variáveis de ambiente do sistema:
# Banco de Dados AWS RDS
export DB_HOST=cofry-2.cc5w4muoa5ca.us-east-1.rds.amazonaws.com
export DB_PORT=5432
export DB_NAME=postgres
export DB_USER=postgres
export DB_PASSWORD=sua_senha_aqui
# OU use uma única variável
export DATABASE_URL=jdbc:postgresql://host:port/databaseExecute o script CofryLocal.sql no banco de dados para criar todas as tabelas:
psql -h $DB_HOST -U $DB_USER -d $DB_NAME -f CofryLocal.sqlmvn clean package# Copie o .war gerado para o diretório webapps do Tomcat
cp target/Cofry-Backend2-1.0-SNAPSHOT.war $TOMCAT_HOME/webapps/
# Inicie o Tomcat
$TOMCAT_HOME/bin/startup.shcurl http://localhost:8080/api/usersO projeto está 100% compatível com Render! Veja o guia completo em DEPLOY_RENDER.md
Quick Start:
- Acesse https://dashboard.render.com
- Conecte o repositório
Patick-gu/Cofry-Back-2 - Selecione "Docker" como runtime
- Configure variáveis de ambiente
- Deploy automático! ✨
- Configure as variáveis de ambiente:
cp env.example .env
# Edite o arquivo .env com suas credenciais- Execute com Docker Compose:
docker-compose up -d- Verifique se está rodando:
docker logs -f cofry-backend
curl http://localhost:8080/api/users# Build da imagem
docker build -t cofry-backend:latest .
# Execute o container
docker run -d \
-p 8080:8080 \
--name cofry-backend \
-e DB_HOST=seu-host \
-e DB_USER=seu-usuario \
-e DB_PASSWORD=sua-senha \
cofry-backend:latest- Instância EC2 com Ubuntu 22.04 ou superior
- Chave SSH da instância
- Credenciais AWS configuradas
- Repositório no GitHub
- Conecte-se à instância EC2:
ssh -i sua-chave.pem ubuntu@seu-ec2-ip- Execute o script de setup:
curl -o setup-ec2.sh https://raw.githubusercontent.com/seu-usuario/cofry-backend/main/scripts/setup-ec2.sh
chmod +x setup-ec2.sh
./setup-ec2.sh- Configure as variáveis de ambiente:
cd ~/cofry-backend
cp env.example .env
nano .env # Edite com suas credenciais- Configure os Secrets no GitHub:
Vá em Settings > Secrets and variables > Actions e adicione:
AWS_ACCESS_KEY_ID: Sua chave de acesso AWSAWS_SECRET_ACCESS_KEY: Sua chave secreta AWSEC2_HOST: IP público ou DNS da instância EC2EC2_USER: Usuário da instância (geralmenteubuntu)EC2_SSH_PRIVATE_KEY: Conteúdo da chave privada SSH (.pem)
- O workflow será executado automaticamente ao fazer push para
mainoumaster.
Se preferir fazer deploy manual:
# No servidor EC2
cd ~/cofry-backend
git pull origin main
docker-compose down
docker-compose build
docker-compose up -d# Verificar logs
docker logs -f cofry-backend
# Verificar saúde da API
curl http://localhost:8080/api/users
# Ou usar o script de health check
./scripts/health-check.sh http://seu-ec2-ip:8080Certifique-se de que o Security Group da EC2 permite tráfego na porta 8080:
- Tipo: Custom TCP
- Porta: 8080
- Origem: 0.0.0.0/0 (ou apenas seus IPs permitidos)
http://localhost:8080/api
Autentica um usuário e retorna seus dados.
Request:
{
"email": "usuario@example.com",
"password": "senha123"
}Response:
{
"userId": 1,
"firstName": "João",
"lastName": "Silva",
"email": "usuario@example.com",
"cpf": "123.456.789-00",
"planId": 1,
"isActive": true
}Altera a senha do usuário.
Request:
{
"userId": 1,
"currentPassword": "senha_atual",
"newPassword": "nova_senha_123!"
}Lista todos os usuários.
Busca um usuário por ID.
Busca informações completas do usuário (inclui endereços e contas).
Cria um novo usuário.
Request:
{
"firstName": "Maria",
"lastName": "Santos",
"email": "maria@example.com",
"taxId": "987.654.321-00",
"dateOfBirth": "1995-03-15",
"planId": 1
}Atualiza um usuário existente (incluindo plano de assinatura).
Request:
{
"planId": 2
}Remove um usuário.
Lista contas de um usuário.
Busca uma conta por ID.
Cria uma nova conta bancária.
Atualiza uma conta.
Define o saldo de uma conta.
Remove uma conta.
Lista cartões de um usuário.
Busca um cartão por ID.
Lista tipos de cartão disponíveis.
Cria um novo cartão.
Request:
{
"userId": 1,
"accountId": 1,
"cardNumber": "1234567890123456",
"cardHolderName": "JOÃO SILVA",
"expirationDate": "12/25",
"cvv": "123",
"cardType": "CREDIT",
"brand": "VISA",
"limit": 5000.00
}Atualiza um cartão.
Remove um cartão.
Lista transações de uma conta.
Busca uma transação por ID.
Cria uma nova transação (atualiza saldo automaticamente).
Request:
{
"sourceAccountId": 1,
"destinationAccountId": 2,
"amount": 100.50,
"transactionType": "TRANSFER",
"description": "Transferência entre contas",
"transactionDate": "2025-12-16"
}Tipos de transação:
DEPOSIT- DepósitoWITHDRAWAL- SaqueTRANSFER- TransferênciaPAYMENT- Pagamento
Atualiza uma transação.
Remove uma transação.
Realiza transferência PIX entre usuários via CPF.
Request:
{
"sourceAccountId": 1,
"recipientCpf": "987.654.321-00",
"amount": 250.00,
"description": "Transferência via PIX"
}Response:
{
"success": true,
"transactionId": 123,
"message": "Transferência PIX realizada com sucesso",
"newBalance": 4750.00
}Lista boletos de um usuário.
Lista boletos por CPF (para pagamento de terceiros).
Lista boletos por status (OPEN, OVERDUE, PAID).
Cria um novo boleto.
Paga um boleto (desconta do saldo automaticamente).
Request:
{
"accountId": 1,
"description": "Pagamento de boleto"
}Configura pagamento automático de boleto.
Lista todos os ativos disponíveis (ações, FIIs, etc.).
Busca um ativo por ID.
Busca um ativo por ticker (ex: PETR4).
Cria uma transação de investimento (compra/venda).
Request:
{
"userId": 1,
"assetId": 5,
"quantity": 10,
"price": 25.50,
"transactionType": "BUY",
"transactionDate": "2025-12-16"
}Lista histórico de transações de investimento do usuário.
Retorna resumo do portfólio do usuário.
Retorna distribuição de ativos no portfólio.
Lista metas de poupança de um usuário.
Busca uma meta por ID.
Cria uma nova meta de poupança.
Atualiza uma meta.
Remove uma meta.
Lista orçamentos de um usuário.
Busca um orçamento por ID.
Cria um novo orçamento.
Atualiza um orçamento.
Remove um orçamento.
Lista endereços de um usuário.
Busca um endereço por ID.
Cria um novo endereço.
Atualiza um endereço.
Remove um endereço.
Atualmente, a API utiliza autenticação simples via email/CPF e senha. O sistema:
- Aceita login por email ou CPF
- Valida senha usando hash SHA-256
- Retorna dados do usuário autenticado
Nota: Para produção, recomenda-se implementar autenticação baseada em tokens (JWT).
{
"success": true,
"data": { ... }
}{
"success": false,
"error": "Mensagem de erro descritiva"
}200 OK- Requisição bem-sucedida201 Created- Recurso criado com sucesso400 Bad Request- Dados inválidos ou faltando404 Not Found- Recurso não encontrado500 Internal Server Error- Erro interno do servidor
Todos os erros retornam uma resposta JSON padronizada:
{
"success": false,
"error": "Descrição do erro"
}Exemplos de erros comuns:
"Usuário não encontrado com ID: 123""Saldo insuficiente. Saldo disponível: R$ 100,00. Valor necessário: R$ 250,00""Email ou CPF já cadastrado""Boleto já está pago""Senha atual incorreta"
# 1. Criar usuário
curl -X POST http://localhost:8080/api/users \
-H "Content-Type: application/json" \
-d '{
"firstName": "João",
"lastName": "Silva",
"email": "joao@example.com",
"taxId": "123.456.789-00",
"dateOfBirth": "1990-01-15",
"planId": 1
}'
# 2. Criar conta (será criada automaticamente com saldo de R$ 20.000)
# 3. Criar cartão Cofry (será criado automaticamente)curl -X POST http://localhost:8080/api/pix/transfer \
-H "Content-Type: application/json" \
-d '{
"sourceAccountId": 1,
"recipientCpf": "987.654.321-00",
"amount": 100.00,
"description": "Transferência PIX"
}'curl -X POST http://localhost:8080/api/form/boleto/1/pay \
-H "Content-Type: application/json" \
-d '{
"accountId": 1,
"description": "Pagamento de conta de luz"
}'curl -X POST http://localhost:8080/api/investments/transaction \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"assetId": 5,
"quantity": 10,
"price": 25.50,
"transactionType": "BUY",
"transactionDate": "2025-12-16"
}'- ✅ Senhas são armazenadas como hash SHA-256
- ✅ Validação de CPF brasileiro
- ✅ Validação de dados de entrada
- ✅ CORS configurado
⚠️ Recomendações para produção:- Implementar autenticação JWT
- Adicionar rate limiting
- Usar HTTPS em produção
- Implementar logging de segurança
- Adicionar validação de tokens CSRF
-
Saldo Automático: Transações do tipo
DEPOSIT,WITHDRAWAL,PAYMENTeTRANSFERatualizam automaticamente o saldo das contas. -
Cartão Automático: Ao criar um novo usuário, um cartão Cofry é gerado automaticamente com:
- Número aleatório gerado
- Limite de R$ 10.000
- Vencimento em 4 anos
- Bandeira Visa
- Tipo Crédito/Débito
-
Saldo Inicial: Novos usuários recebem automaticamente uma conta com saldo inicial de R$ 20.000.
-
Planos de Assinatura: O sistema possui 3 planos:
- Cofry Start (R$ 0,00) - Gratuito
- Cofry Pro (R$ 7,77) - Intermediário
- Cofry Black (R$ 47,99) - Premium
- 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. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido como parte do projeto Cofry - Sistema de Gestão Financeira Pessoal.
Para dúvidas ou problemas, abra uma issue no repositório.