from typing import Optional from pydantic import BaseModel class PriceImpact(BaseModel): asset: str m5: float m15: float m1h: float price_at_post: float class TrumpPost(BaseModel): id: int text: str source: str published_at: str # ISO sentiment: str signal: Optional[str] = None # buy | sell | short | hold ai_confidence: int ai_reasoning: Optional[str] = None relevant: bool price_impact: Optional[PriceImpact] = None model_config = {"from_attributes": True} class Candle(BaseModel): time: int open: float high: float low: float close: float volume: float class BotTrade(BaseModel): id: int asset: str side: str entry_price: float exit_price: float pnl_usd: float hold_seconds: int trigger_post_id: int opened_at: str closed_at: str model_config = {"from_attributes": True} class BotPerformance(BaseModel): period_days: int total_trades: int win_rate: float net_pnl_usd: float avg_hold_seconds: float max_drawdown_pct: float class SubscribeRequest(BaseModel): wallet: str signature: str class SubscribeResponse(BaseModel): status: str wallet: str class UserResponse(BaseModel): wallet_address: str active: bool subscribed_at: Optional[str] = None hl_api_key_set: bool trades: list[BotTrade]