"""Data models for trade persistence.""" from dataclasses import dataclass, asdict from typing import Optional from datetime import datetime @dataclass class Trade: """Represents a completed trade.""" trade_id: str symbol: str side: str entry_price: float size: float size_usdt: float entry_time: str exit_price: Optional[float] = None pnl_usd: Optional[float] = None pnl_pct: Optional[float] = None exit_time: Optional[str] = None hold_duration_hours: Optional[float] = None reason: Optional[str] = None order_id_entry: Optional[str] = None order_id_exit: Optional[str] = None id: Optional[int] = None def to_dict(self) -> dict: """Convert to dictionary.""" return asdict(self) @classmethod def from_row(cls, row: tuple, columns: list[str]) -> "Trade": """Create Trade from database row.""" data = dict(zip(columns, row)) return cls(**data) @dataclass class DailySummary: """Daily trading summary.""" date: str total_trades: int = 0 winning_trades: int = 0 total_pnl_usd: float = 0.0 max_drawdown_usd: float = 0.0 id: Optional[int] = None def to_dict(self) -> dict: """Convert to dictionary.""" return asdict(self) @dataclass class Session: """Trading session metadata.""" start_time: str end_time: Optional[str] = None starting_balance: Optional[float] = None ending_balance: Optional[float] = None total_pnl: Optional[float] = None total_trades: int = 0 id: Optional[int] = None def to_dict(self) -> dict: """Convert to dictionary.""" return asdict(self)