πŸ—οΈ Arquitetura TΓ©cnica

VisΓ£o Geral

O Crypto Dashboard Γ© construΓ­do com uma arquitetura em camadas, separando claramente a interface do utilizador, lΓ³gica de negΓ³cio, acesso a dados e integraΓ§Γ΅es externas.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Frontend (Streamlit UI)                 β”‚
β”‚  app.py, pages/*, components                    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Services (Business Logic)               β”‚
β”‚  services/shares.py                             β”‚
β”‚  services/snapshots.py                          β”‚
β”‚  services/coingecko.py                          β”‚
β”‚  services/calculations.py                       β”‚
β”‚  services/fees.py                               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Database Layer                          β”‚
β”‚  database/connection.py                         β”‚
β”‚  database/users.py                              β”‚
β”‚  database/portfolio.py                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         PostgreSQL Database                     β”‚
β”‚  Tables, Indexes, Constraints                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         External APIs                           β”‚
β”‚  CoinGecko API (preΓ§os)                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Stack TecnolΓ³gico

Backend

Frontend

IntegraΓ§Γ΅es

Estrutura de DiretΓ³rios

CryptoDashboard/
β”œβ”€β”€ app.py                          # Entry point da aplicaΓ§Γ£o
β”œβ”€β”€ config.py                       # ConfiguraΓ§Γ΅es globais
β”œβ”€β”€ requirements.txt                # DependΓͺncias Python
β”‚
β”œβ”€β”€ auth/                           # AutenticaΓ§Γ£o e sessΓ£o
β”‚   β”œβ”€β”€ login.py                    # LΓ³gica de login
β”‚   β”œβ”€β”€ register.py                 # Registo de utilizadores
β”‚   └── session_manager.py          # GestΓ£o de sessΓ£o Streamlit
β”‚
β”œβ”€β”€ database/                       # Camada de acesso a dados
β”‚   β”œβ”€β”€ connection.py               # Pool de conexΓ΅es PostgreSQL
β”‚   β”œβ”€β”€ users.py                    # Queries relacionadas a utilizadores
β”‚   β”œβ”€β”€ portfolio.py                # Queries de portfΓ³lio
β”‚   └── tablesv2.sql                # Schema completo da BD (V2)
β”‚
β”œβ”€β”€ pages/                          # PΓ‘ginas da aplicaΓ§Γ£o (routing)
β”‚   β”œβ”€β”€ analytics.py                # PΓ‘gina de anΓ‘lise (legacy)
β”‚   β”œβ”€β”€ portfolio.py                # GestΓ£o de portfΓ³lio
β”‚   β”œβ”€β”€ portfolio_analysis.py       # Dashboard de anΓ‘lise completo
β”‚   β”œβ”€β”€ settings.py                 # ConfiguraΓ§Γ΅es
β”‚   └── users.py                    # GestΓ£o de utilizadores (admin)
β”‚
β”œβ”€β”€ services/                       # LΓ³gica de negΓ³cio
β”‚   β”œβ”€β”€ calculations.py             # CΓ‘lculos financeiros
β”‚   β”œβ”€β”€ coingecko.py                # Cliente CoinGecko API
β”‚   β”œβ”€β”€ fees.py                     # GestΓ£o de taxas
β”‚   β”œβ”€β”€ minswap.py                  # IntegraΓ§Γ£o MinSwap
β”‚   β”œβ”€β”€ shares.py                   # Sistema de shares/NAV ⭐
β”‚   └── snapshots.py                # Cache de preΓ§os histΓ³ricos ⭐
β”‚
β”œβ”€β”€ utils/                          # UtilitΓ‘rios
β”‚   β”œβ”€β”€ formatters.py               # FormataΓ§Γ£o de nΓΊmeros/datas
β”‚   └── security.py                 # FunΓ§Γ΅es de seguranΓ§a
β”‚
└── wiki/                           # DocumentaΓ§Γ£o
    β”œβ”€β”€ 01-arquitetura.md
    β”œβ”€β”€ 02-shares-nav.md
    └── ...

Base de Dados

Schema Principal

Tabelas de Utilizadores

-- AutenticaΓ§Γ£o e perfil base
t_users
β”œβ”€β”€ user_id (PK)
β”œβ”€β”€ username (unique)
β”œβ”€β”€ password_hash
β”œβ”€β”€ email (unique)
└── is_admin (boolean)

-- Perfil detalhado
t_user_profile
β”œβ”€β”€ profile_id (PK)
β”œβ”€β”€ user_id (FK β†’ t_users)
β”œβ”€β”€ full_name
β”œβ”€β”€ birth_date
β”œβ”€β”€ gender
└── address

Tabelas de Capital

-- Movimentos de capital (depΓ³sitos/levantamentos)
t_user_capital_movements
β”œβ”€β”€ movement_id (PK)
β”œβ”€β”€ user_id (FK β†’ t_users)
β”œβ”€β”€ movement_date
β”œβ”€β”€ credit (depΓ³sito)
β”œβ”€β”€ debit (levantamento)
└── notes

-- Sistema de shares (ownership) ⭐
t_user_shares
β”œβ”€β”€ share_id (PK)
β”œβ”€β”€ user_id (FK β†’ t_users)
β”œβ”€β”€ movement_date
β”œβ”€β”€ movement_type ('deposit' | 'withdrawal')
β”œβ”€β”€ amount_eur
β”œβ”€β”€ nav_per_share (preΓ§o da share no momento)
β”œβ”€β”€ shares_amount (positivo ou negativo)
β”œβ”€β”€ total_shares_after (acumulado do user)
β”œβ”€β”€ fund_nav (NAV total do fundo)
└── notes

Tabelas de Ativos e TransaΓ§Γ΅es

-- Ativos disponΓ­veis
t_assets
β”œβ”€β”€ asset_id (PK)
β”œβ”€β”€ symbol (e.g., 'BTC', 'ETH', 'EUR')
β”œβ”€β”€ name
β”œβ”€β”€ chain
β”œβ”€β”€ coingecko_id
└── is_stablecoin (BOOLEAN)

-- Exchanges e Contas
t_exchanges
β”œβ”€β”€ exchange_id (PK)
β”œβ”€β”€ name
└── category

t_exchange_accounts
β”œβ”€β”€ account_id (PK)
β”œβ”€β”€ exchange_id (FK β†’ t_exchanges)
β”œβ”€β”€ user_id (FK β†’ t_users)
β”œβ”€β”€ name (rΓ³tulo da conta)
└── account_category (ex.: Spot, Earn, Wallet)

Cache de Preços ⭐

-- Snapshots de preΓ§os histΓ³ricos
t_price_snapshots
β”œβ”€β”€ snapshot_id (PK)
β”œβ”€β”€ asset_id (FK β†’ t_assets)
β”œβ”€β”€ snapshot_date
β”œβ”€β”€ price
β”œβ”€β”€ vs_currency ('eur', 'usd', etc)
└── created_at

-- Index para busca rΓ‘pida
CREATE INDEX idx_price_snapshots_lookup 
ON t_price_snapshots(asset_id, snapshot_date, vs_currency);

Componentes Principais

1. Sistema de AutenticaΓ§Γ£o

LocalizaΓ§Γ£o: auth/

Fluxo:

  1. Utilizador submete credenciais
  2. login.py valida contra t_users (bcrypt hash)
  3. session_manager.py cria sessΓ£o Streamlit
  4. SessΓ£o armazena: user_id, username, is_admin
  5. Decorator @require_auth protege pΓ‘ginas

SeguranΓ§a: