diff --git a/.gitignore b/.gitignore index 549289c..43aeee7 100644 --- a/.gitignore +++ b/.gitignore @@ -148,6 +148,7 @@ env.bak/ venv.bak/ /logger_helper/loggers /app/bybit/logger_bybit/loggers +*.db # Spyder project settings .spyderproject .spyproject diff --git a/app/bybit/profile_bybit.py b/app/bybit/profile_bybit.py index e930a32..e5d5e7a 100644 --- a/app/bybit/profile_bybit.py +++ b/app/bybit/profile_bybit.py @@ -21,16 +21,20 @@ async def user_profile_bybit(tg_id: int, message: Message, state: FSMContext) -> if wallet: balance = wallet.get("totalWalletBalance", "0") symbol = await rq.get_user_symbol(tg_id=tg_id) - await message.answer( - text=f"💎Ваш профиль:\n\n" - f"⚖️ Баланс: {float(balance):,.2f} USD\n" - f"📊Торговая пара: {symbol}\n\n" - f"Краткая инструкция:\n" - f"1. Укажите торговую пару (например: BTCUSDT).\n" - f"2. В настройках выставьте все необходимые параметры.\n" - f"3. Нажмите кнопку 'Начать торговлю'.\n", - reply_markup=kbi.main_menu, - ) + if symbol is None: + await rq.set_user_symbol(tg_id=tg_id, symbol="BTCUSDT") + await user_profile_bybit(tg_id=tg_id, message=message, state=state) + else: + await message.answer( + text=f"💎Ваш профиль:\n\n" + f"⚖️ Баланс: {float(balance):,.2f} USD\n" + f"📊Торговая пара: {symbol}\n\n" + f"Краткая инструкция:\n" + f"1. Укажите торговую пару (например: BTCUSDT).\n" + f"2. В настройках выставьте все необходимые параметры.\n" + f"3. Нажмите кнопку 'Начать торговлю'.\n", + reply_markup=kbi.main_menu, + ) else: await message.answer( text="Ошибка при подключении, повторите попытку", diff --git a/config.py b/config.py index 2becae7..62850aa 100644 --- a/config.py +++ b/config.py @@ -6,5 +6,3 @@ if env_path: load_dotenv(env_path) BOT_TOKEN = os.getenv("BOT_TOKEN") - -DATABASE_URL = f"sqlite+aiosqlite:///database/data/sqlite.db" diff --git a/database/__init__.py b/database/__init__.py index 724fd47..4b539b9 100644 --- a/database/__init__.py +++ b/database/__init__.py @@ -1,14 +1,19 @@ -from database.models import Base +from database.models import Base, User, UserAdditionalSettings, UserApi, UserConditionalSettings, UserDeals, \ + UserRiskManagement, UserSymbol import logging.config from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession from sqlalchemy import event -from config import DATABASE_URL - +from pathlib import Path from logger_helper.logger_helper import LOGGING_CONFIG logging.config.dictConfig(LOGGING_CONFIG) logger = logging.getLogger("database") +BASE_DIR = Path(__file__).parent.resolve() +DATA_DIR = BASE_DIR / "db" +DATA_DIR.mkdir(parents=True, exist_ok=True) + +DATABASE_URL = f"sqlite+aiosqlite:///{DATA_DIR / 'stcs.db'}" async_engine = create_async_engine( DATABASE_URL, @@ -16,22 +21,25 @@ async_engine = create_async_engine( connect_args={"check_same_thread": False} ) + @event.listens_for(async_engine.sync_engine, "connect") def _enable_foreign_keys(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") cursor.close() + 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, exc_info=True) + logger.error("Database initialization failed: %s", e) diff --git a/run.py b/run.py index 8d92a6d..e86f084 100644 --- a/run.py +++ b/run.py @@ -5,10 +5,10 @@ import logging.config from aiogram import Bot, Dispatcher from aiogram.fsm.storage.redis import RedisStorage +from database import init_db from app.bybit.web_socket import WebSocketBot from app.telegram.handlers import router from config import BOT_TOKEN -from database import init_db from logger_helper.logger_helper import LOGGING_CONFIG logging.config.dictConfig(LOGGING_CONFIG)