Skip to content

About

Project backend for Google Hackaton using gemini in education category.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

💰 Fortuna — Tempo é Dinheiro

Planejamento financeiro inteligente com cálculos financeiros e inteligência artificial.

Sobre • Funcionalidades • Tecnologias • Instalação • API


📖 Sobre o projeto

O Fortuna é uma API desenvolvida para uma aplicação de planejamento financeiro pessoal.

O objetivo do projeto é ajudar usuários a transformar objetivos financeiros em metas reais e mensuráveis. A aplicação permite definir um patrimônio desejado ou uma renda mensal através de dividendos, calcular aportes necessários, estimar o tempo para alcançar uma meta e acompanhar a evolução do patrimônio.

Além dos cálculos financeiros, o projeto utiliza o Google Gemini para analisar metas e gerar planejamentos personalizados.

Exemplos de perguntas que o Fortuna ajuda a responder

  • Quanto preciso investir mensalmente para atingir R$ 100.000?
  • Quanto tempo vou demorar para alcançar determinado patrimônio?
  • Quanto preciso acumular para gerar uma renda mensal com dividendos?
  • Como novos aportes afetam o tempo necessário para atingir uma meta?
  • Qual estratégia posso seguir para alcançar meu objetivo financeiro?

🏆 Google Gemini Hackathon 2025

O Fortuna foi desenvolvido como parte do Google Gemini Hackathon 2025, utilizando a inteligência artificial do Google Gemini como um dos recursos centrais do projeto.

A proposta foi combinar planejamento financeiro com IA para ajudar usuários a transformar objetivos pessoais em metas financeiras mais claras e práticas.

O Gemini é utilizado para analisar informações relacionadas às metas do usuário e gerar orientações e planejamentos personalizados, complementando os cálculos financeiros realizados pela aplicação.

🤖 Uso da Inteligência Artificial

Dentro do projeto, o Google Gemini pode ser utilizado para:

  • Analisar objetivos financeiros
  • Ajudar o usuário a estruturar suas metas
  • Interpretar informações financeiras relacionadas aos objetivos
  • Gerar planejamentos personalizados
  • Tornar a experiência de planejamento financeiro mais interativa

O projeto foi pensado para mostrar como a inteligência artificial pode ser usada além de conversas genéricas, integrando o Gemini diretamente à lógica de uma aplicação real de planejamento financeiro.


✨ Funcionalidades

👤 Usuários

  • Cadastro de usuários
  • Autenticação com JWT
  • Atualização de perfil
  • Exclusão de conta
  • Upload de foto de perfil

🎯 Metas financeiras

  • Criação de metas
  • Metas baseadas em patrimônio
  • Metas baseadas em dividendos mensais
  • Simulação de cenários financeiros
  • Cálculo do aporte mensal necessário
  • Cálculo do tempo necessário para atingir uma meta
  • Atualização dos cálculos após movimentações

💸 Transações

  • Registro de aportes
  • Registro de retiradas
  • Atualização do patrimônio acumulado
  • Recalculo das projeções da meta

🤖 Inteligência Artificial

Integração com o Google Gemini para:

  • Analisar objetivos financeiros
  • Ajudar na definição de metas
  • Gerar planejamentos personalizados

🛠 Tecnologias

O projeto foi desenvolvido utilizando:

  • Node.js
  • TypeScript
  • Express
  • CockroachDB
  • PostgreSQL
  • Knex.js
  • Google Gemini
  • JWT
  • Bcrypt
  • Multer
  • PM2

🏗 Estrutura do projeto

src/
│
├── configs/          # Configurações da aplicação
├── controllers/      # Controllers da API
├── database/         # Conexão e configurações do banco
├── middleware/       # Middlewares
├── providers/        # Providers e integrações
├── routes/           # Rotas da API
├── service/          # Serviços e regras de negócio
├── utils/            # Utilitários
│
├── knexfile.ts       # Configuração do Knex
└── server.ts         # Inicialização do servidor

🚀 Instalação

Pré-requisitos

Antes de começar, você precisa ter instalado:

  • Node.js
  • npm
  • Uma instância PostgreSQL ou CockroachDB

Clone o repositório

git clone https://github.com/iDimaBR/gemini-hackaton-backend.git

Entre na pasta do projeto:

cd gemini-hackaton-backend

Instale as dependências:

npm install

⚙️ Variáveis de ambiente

Crie um arquivo .env na raiz do projeto.

DATABASE_URL=
AUTH_SECRET=
GEMINI_API_KEY=
PORT=3333
Variável Descrição
DATABASE_URL URL de conexão com o banco de dados
AUTH_SECRET Chave utilizada para autenticação JWT
GEMINI_API_KEY Chave da API do Google Gemini
PORT Porta da aplicação

⚠️ Nunca envie credenciais reais para repositórios públicos.


▶️ Executando o projeto

Desenvolvimento

npm run dev

A API estará disponível em:

http://localhost:3333

Build

Para compilar o projeto:

npm run build

Produção

npm start

🗄 Banco de dados

O projeto utiliza Knex.js para gerenciamento do banco de dados.

Executar migrations

npm run migrate

Criar uma migration

npm run migrate:make nome_da_migration

Reverter migration

npm run rollback

🔐 Autenticação

A API utiliza JWT (JSON Web Token) para proteger rotas autenticadas.

Após realizar login, envie o token no header:

Authorization: Bearer SEU_TOKEN

📡 API

Base URL local:

http://localhost:3333

👤 Usuários

Criar usuário

POST /api/users

Body

{
  "name": "João Silva",
  "email": "joao@email.com",
  "password": "123456",
  "birthday": "2002-12-21T22:44:58.698Z"
}
Campo Tipo Descrição
name string Nome do usuário
email string Email da conta
password string Senha
birthday date Data de nascimento

Atualizar usuário

🔒 Requer autenticação.

PUT /api/users

Body

{
  "name": "João Silva",
  "email": "joao@email.com",
  "password": "nova_senha",
  "old_password": "senha_atual",
  "birthday": "2002-12-21T22:44:58.698Z"
}

Listar usuários

🔒 Requer autenticação.

GET /api/users

Excluir usuário

🔒 Requer autenticação.

DELETE /api/users/:id
Parâmetro Tipo Descrição
id number ID do usuário

Atualizar foto de perfil

🔒 Requer autenticação.

PATCH /api/users/picture

A requisição deve utilizar:

multipart/form-data

Campo

Campo Tipo
picture file

Visualizar arquivo

GET /api/files/:filename

Exemplo:

/api/files/foto-do-usuario.png

🔑 Sessões

Login

POST /api/sessions

Body

{
  "email": "joao@email.com",
  "password": "123456"
}

Exemplo de resposta

{
  "user": {
    "id": 1,
    "name": "João Silva",
    "email": "joao@email.com"
  },
  "token": "JWT_TOKEN"
}

Utilize o token retornado nas rotas protegidas.


🎯 Metas Financeiras

Listar metas

🔒 Requer autenticação.

GET /api/goals

Retorna as metas pertencentes ao usuário autenticado.


Buscar meta por ID

🔒 Requer autenticação.

GET /api/goals/:id
Parâmetro Tipo Descrição
id number ID da meta

Criar meta

🔒 Requer autenticação.

POST /api/goals

Exemplo — Meta baseada em patrimônio

{
  "name": "Meu primeiro R$ 100 mil",
  "patrimony": 100000,
  "type_goal": false,
  "initial_patrimony": 10000,
  "time_desired": 5,
  "monthly_aport": 0,
  "dividends": 0,
  "rate": 0.01
}

Exemplo — Meta baseada em dividendos

{
  "name": "Segundo salário",
  "patrimony": 0,
  "dividends": 2000,
  "type_goal": true,
  "initial_patrimony": 10000,
  "time_desired": 10,
  "monthly_aport": 0,
  "rate": 0.01
}

Campos da meta

Campo Tipo Descrição
name string Nome da meta
patrimony number Patrimônio desejado
dividends number Renda mensal desejada
type_goal boolean Tipo da meta
initial_patrimony number Patrimônio inicial
time_desired number Tempo desejado
monthly_aport number Aporte mensal
rate number Taxa de rendimento estimada

Tipo da meta

true  → Meta baseada em dividendos
false → Meta baseada em patrimônio

🧮 Simular uma meta

🔒 Requer autenticação.

Permite calcular diferentes cenários financeiros antes de criar ou atualizar uma meta.

POST /api/goals/preview

Body

{
  "name": "Segundo salário",
  "patrimony": 100000,
  "dividends": 756,
  "type_goal": true,
  "initial_patrimony": 0,
  "time_desired": 10,
  "monthly_aport": 567,
  "rate": 0.012
}

A simulação retorna informações como:

  • Aporte necessário para atingir uma meta
  • Tempo estimado para alcançar o objetivo
  • Patrimônio necessário
  • Projeção baseada na taxa de rendimento

💸 Registrar transação

🔒 Requer autenticação.

POST /api/goals/transaction

Body

{
  "aport": 1000,
  "aport_type": true,
  "goal_id": 32
}
Campo Tipo Descrição
aport number Valor da movimentação
aport_type boolean Tipo da movimentação
goal_id number ID da meta

Tipo da movimentação

true  → Aporte
false → Retirada

✏️ Atualizar meta

🔒 Requer autenticação.

PUT /api/goals/:goal_id

Exemplo

{
  "name": "Meu primeiro milhão",
  "patrimony": 1000000,
  "monthly_aport": 5000,
  "rate": 0.01
}

🗑 Excluir meta

🔒 Requer autenticação.

DELETE /api/goals/:id

🤖 Inteligência Artificial

O Fortuna utiliza o Google Gemini para tornar o planejamento financeiro mais personalizado.

Analisar objetivo

POST /api/gemini/analyze

A IA analisa os dados financeiros enviados e ajuda a interpretar o objetivo.

Exemplo

{
  "name": "Comprar uma casa",
  "patrimony": 500000,
  "initial_patrimony": 50000,
  "time_desired": 10,
  "monthly_aport": 3000,
  "rate": 0.01
}

Definir uma meta com IA

POST /api/gemini/define

A inteligência artificial ajuda o usuário a estruturar uma meta financeira a partir de seu objetivo.


Gerar planejamento financeiro

GET /api/gemini/plan/:goal_id

Gera um planejamento personalizado utilizando os dados da meta cadastrada.


📜 Scripts disponíveis

Comando Descrição
npm run dev Executa a aplicação em desenvolvimento
npm run build Compila o projeto TypeScript
npm start Executa a aplicação em produção
npm run migrate Executa as migrations
npm run migrate:make Cria uma migration
npm run rollback Reverte a última migration

🔒 Segurança

A aplicação utiliza:

  • JWT para autenticação
  • Bcrypt para hash de senhas
  • Middlewares para proteção de rotas
  • Variáveis de ambiente para credenciais sensíveis

Nunca envie arquivos .env contendo credenciais reais para o GitHub.

Feito para transformar objetivos financeiros em metas mais claras e mensuráveis. 💰

About

Project backend for Google Hackaton using gemini in education category.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages