The entire database has been changed to PostgresSQL. The entire code has been updated.
This commit is contained in:
24
database/__init__.py
Normal file
24
database/__init__.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import logging.config
|
||||
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine, AsyncSession
|
||||
|
||||
from database.models import Base
|
||||
|
||||
from config import DATABASE_URL
|
||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||
|
||||
logging.config.dictConfig(LOGGING_CONFIG)
|
||||
logger = logging.getLogger("database")
|
||||
|
||||
async_engine = create_async_engine(DATABASE_URL, echo=False)
|
||||
|
||||
async_session = async_sessionmaker(async_engine, class_=AsyncSession, expire_on_commit=False)
|
||||
|
||||
|
||||
async def init_db():
|
||||
try:
|
||||
async with async_engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
logger.info("Database initialized.")
|
||||
except Exception as e:
|
||||
logger.error("Database initialization failed: %s", e)
|
192
database/models.py
Normal file
192
database/models.py
Normal file
@@ -0,0 +1,192 @@
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.ext.asyncio import AsyncAttrs
|
||||
from sqlalchemy import Column, ForeignKey, Integer, String, BigInteger, 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(BigInteger, 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")
|
||||
order_type = Column(String, nullable=False, default="Market")
|
||||
conditional_order_type = Column(String, nullable=False, default="Market")
|
||||
limit_price = Column(Float, nullable=False, default=0.0)
|
||||
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")
|
||||
leverage_to_buy = Column(String, nullable=False, default="10")
|
||||
leverage_to_sell = 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(Integer, nullable=False, default=1)
|
||||
stop_loss_percent = Column(Integer, nullable=False, default=1)
|
||||
max_risk_percent = Column(Integer, nullable=False, default=100)
|
||||
commission_fee = Column(String, nullable=False, default="Yes_commission_fee")
|
||||
|
||||
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)
|
||||
trading_type = Column(String, nullable=True)
|
||||
margin_type = Column(String, nullable=True)
|
||||
order_type = Column(String, nullable=True)
|
||||
conditional_order_type = Column(String, nullable=True)
|
||||
leverage = Column(String, nullable=True)
|
||||
leverage_to_buy = Column(String, nullable=True)
|
||||
leverage_to_sell = 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)
|
||||
max_risk_percent = Column(Integer, nullable=True)
|
||||
switch_side_mode = Column(Boolean, nullable=True)
|
||||
limit_price = Column(Float, nullable=True)
|
||||
trigger_price = Column(Float, 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)
|
||||
|
||||
user = relationship("User", back_populates="user_auto_trading")
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint('user_id', 'symbol', name='uq_user_auto_trading_symbol'),
|
||||
)
|
1277
database/request.py
Normal file
1277
database/request.py
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user