185 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from sqlalchemy.ext.declarative import declarative_base
 | 
						|
from sqlalchemy.ext.asyncio import AsyncAttrs
 | 
						|
from sqlalchemy import Column, ForeignKey, Integer, String, Float, Boolean, UniqueConstraint
 | 
						|
from sqlalchemy.orm import relationship
 | 
						|
 | 
						|
Base = declarative_base(cls=AsyncAttrs)
 | 
						|
 | 
						|
 | 
						|
class User(Base):
 | 
						|
    """User model."""
 | 
						|
    __tablename__ = "users"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    tg_id = Column(Integer, nullable=False, unique=True)
 | 
						|
    username = Column(String, nullable=False)
 | 
						|
 | 
						|
    user_api = relationship("UserApi",
 | 
						|
                            back_populates="user",
 | 
						|
                            cascade="all, delete-orphan",
 | 
						|
                            passive_deletes=True,
 | 
						|
                            uselist=False)
 | 
						|
 | 
						|
    user_symbol = relationship("UserSymbol",
 | 
						|
                               back_populates="user",
 | 
						|
                               cascade="all, delete-orphan",
 | 
						|
                               passive_deletes=True,
 | 
						|
                               uselist=False)
 | 
						|
 | 
						|
    user_additional_settings = relationship("UserAdditionalSettings",
 | 
						|
                                            back_populates="user",
 | 
						|
                                            cascade="all, delete-orphan",
 | 
						|
                                            passive_deletes=True,
 | 
						|
                                            uselist=False)
 | 
						|
 | 
						|
    user_risk_management = relationship("UserRiskManagement",
 | 
						|
                                        back_populates="user",
 | 
						|
                                        cascade="all, delete-orphan",
 | 
						|
                                        passive_deletes=True,
 | 
						|
                                        uselist=False)
 | 
						|
 | 
						|
    user_conditional_settings = relationship("UserConditionalSettings",
 | 
						|
                                             back_populates="user",
 | 
						|
                                             cascade="all, delete-orphan",
 | 
						|
                                             passive_deletes=True,
 | 
						|
                                             uselist=False)
 | 
						|
 | 
						|
    user_deals = relationship("UserDeals",
 | 
						|
                              back_populates="user",
 | 
						|
                              cascade="all, delete-orphan",
 | 
						|
                              passive_deletes=True)
 | 
						|
 | 
						|
    user_auto_trading = relationship("UserAutoTrading",
 | 
						|
                                     back_populates="user",
 | 
						|
                                     cascade="all, delete-orphan",
 | 
						|
                                     passive_deletes=True)
 | 
						|
 | 
						|
 | 
						|
class UserApi(Base):
 | 
						|
    """User API model."""
 | 
						|
    __tablename__ = "user_api"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False, unique=True)
 | 
						|
    api_key = Column(String, nullable=False)
 | 
						|
    api_secret = Column(String, nullable=False)
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_api")
 | 
						|
 | 
						|
 | 
						|
class UserSymbol(Base):
 | 
						|
    """User symbol model."""
 | 
						|
    __tablename__ = "user_symbol"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False, unique=True)
 | 
						|
    symbol = Column(String, nullable=False, default="BTCUSDT")
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_symbol")
 | 
						|
 | 
						|
 | 
						|
class UserAdditionalSettings(Base):
 | 
						|
    """User additional settings model."""
 | 
						|
    __tablename__ = "user_additional_settings"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False, unique=True)
 | 
						|
    trade_mode = Column(String, nullable=False, default="Merged_Single")
 | 
						|
    switch_side = Column(String, nullable=False, default="По направлению")
 | 
						|
    side = Column(String, nullable=False, default="Buy")
 | 
						|
    trigger_price = Column(Float, nullable=False, default=0.0)
 | 
						|
    margin_type = Column(String, nullable=False, default="ISOLATED_MARGIN")
 | 
						|
    leverage = Column(String, nullable=False, default="10")
 | 
						|
    order_quantity = Column(Float, nullable=False, default=5.0)
 | 
						|
    martingale_factor = Column(Float, nullable=False, default=1.0)
 | 
						|
    max_bets_in_series = Column(Integer, nullable=False, default=1)
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_additional_settings")
 | 
						|
 | 
						|
 | 
						|
class UserRiskManagement(Base):
 | 
						|
    """User risk management model."""
 | 
						|
    __tablename__ = "user_risk_management"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False, unique=True)
 | 
						|
    take_profit_percent = Column(Float, nullable=False, default=1)
 | 
						|
    stop_loss_percent = Column(Float, nullable=False, default=1)
 | 
						|
    commission_fee = Column(String, nullable=False, default="Yes_commission_fee")
 | 
						|
    commission_place = Column(String, nullable=False, default="Commission_for_qty")
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_risk_management")
 | 
						|
 | 
						|
 | 
						|
class UserConditionalSettings(Base):
 | 
						|
    """User conditional settings model."""
 | 
						|
    __tablename__ = "user_conditional_settings"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False, unique=True)
 | 
						|
 | 
						|
    timer_start = Column(Integer, nullable=False, default=0)
 | 
						|
    timer_end = Column(Integer, nullable=False, default=0)
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_conditional_settings")
 | 
						|
 | 
						|
 | 
						|
class UserDeals(Base):
 | 
						|
    """User deals model."""
 | 
						|
    __tablename__ = "user_deals"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False)
 | 
						|
    current_step = Column(Integer, nullable=True)
 | 
						|
    symbol = Column(String, nullable=True)
 | 
						|
    trade_mode = Column(String, nullable=True)
 | 
						|
    side_mode = Column(String, nullable=True)
 | 
						|
    base_quantity = Column(Float, nullable=True)
 | 
						|
    margin_type = Column(String, nullable=True)
 | 
						|
    leverage = Column(String, nullable=True)
 | 
						|
    last_side = Column(String, nullable=True)
 | 
						|
    closed_side = Column(String, nullable=True)
 | 
						|
    order_quantity = Column(Float, nullable=True)
 | 
						|
    martingale_factor = Column(Float, nullable=True)
 | 
						|
    max_bets_in_series = Column(Integer, nullable=True)
 | 
						|
    take_profit_percent = Column(Integer, nullable=True)
 | 
						|
    stop_loss_percent = Column(Integer, nullable=True)
 | 
						|
    trigger_price = Column(Float, nullable=True)
 | 
						|
    current_series = Column(Integer, nullable=True)
 | 
						|
    commission_fee = Column(String, nullable=True)
 | 
						|
    commission_place = Column(String, nullable=True)
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_deals")
 | 
						|
 | 
						|
    __table_args__ = (
 | 
						|
        UniqueConstraint('user_id', 'symbol', name='uq_user_symbol'),
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
class UserAutoTrading(Base):
 | 
						|
    """User auto trading model."""
 | 
						|
    __tablename__ = "user_auto_trading"
 | 
						|
 | 
						|
    id = Column(Integer, primary_key=True, autoincrement=True)
 | 
						|
    user_id = Column(Integer,
 | 
						|
                     ForeignKey("users.id", ondelete="CASCADE"),
 | 
						|
                     nullable=False)
 | 
						|
    symbol = Column(String, nullable=True)
 | 
						|
    auto_trading = Column(Boolean, nullable=True)
 | 
						|
    fee = Column(Float, nullable=True)
 | 
						|
    total_fee = Column(Float, nullable=True)
 | 
						|
 | 
						|
    user = relationship("User", back_populates="user_auto_trading")
 |