ποΈ 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
- Python 3.10+: Linguagem principal
- Streamlit: Framework web para UI interativa
- PostgreSQL: Base de dados relacional
- SQLAlchemy: ORM e abstraΓ§Γ£o de queries
- psycopg2: Driver PostgreSQL
- bcrypt: Hash de passwords
Frontend
- Streamlit Components: UI widgets nativos
- Plotly: VisualizaΓ§Γ΅es interativas (grΓ‘ficos, charts)
- Pandas: ManipulaΓ§Γ£o de dados e dataframes
- datetime/dateutil: GestΓ£o de datas
IntegraΓ§Γ΅es
- CoinGecko API: PreΓ§os de criptomoedas em tempo real e histΓ³ricos
- Requests: Cliente HTTP para APIs externas
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:
- Utilizador submete credenciais
login.pyvalida contrat_users(bcrypt hash)session_manager.pycria sessΓ£o Streamlit- SessΓ£o armazena:
user_id,username,is_admin - Decorator
@require_authprotege pΓ‘ginas
SeguranΓ§a:
- Passwords nunca armazenadas em plain text
- bcrypt com salt automΓ‘tico
- SessΓ£o server-side do Streamlit
- ValidaΓ§Γ£o em todas as pΓ‘ginas protegidas