From 5645b6cf93754c47815e66a5b16b9db340d059dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Fri, 8 May 2026 03:33:03 +0900 Subject: [PATCH] Add demo account database models --- app/models.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 app/models.py diff --git a/app/models.py b/app/models.py new file mode 100644 index 0000000..4571f48 --- /dev/null +++ b/app/models.py @@ -0,0 +1,38 @@ +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, + )