from datetime import datetime, timezone from sqlalchemy import DateTime, Float, Integer, String from sqlalchemy.orm import Mapped, mapped_column from app.db import Base class DemoAccountState(Base): __tablename__ = 'demo_account_state' id: Mapped[int] = mapped_column(Integer, primary_key=True, default=1) quote_asset: Mapped[str] = mapped_column(String(16), nullable=False) balance: Mapped[float] = mapped_column(Float, nullable=False) equity: Mapped[float] = mapped_column(Float, nullable=False) realized_pnl: Mapped[float] = mapped_column(Float, nullable=False, default=0.0) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc), nullable=False, ) class DemoTradeRecord(Base): __tablename__ = 'demo_trades' id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) market: Mapped[str] = mapped_column(String(32), nullable=False, index=True) side: Mapped[str] = mapped_column(String(8), nullable=False) price: Mapped[float] = mapped_column(Float, nullable=False) amount: Mapped[float] = mapped_column(Float, nullable=False) quote_amount: Mapped[float] = mapped_column(Float, nullable=False) reason: Mapped[str] = mapped_column(String(512), nullable=False) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False, )