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 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, echo=False, 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)