# app/database.py from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, Session from typing import Generator from app.config import settings import logging logger = logging.getLogger(__name__) # Создаем синхронный движок (для простоты, без asyncio) engine = create_engine( settings.DATABASE_URL, echo=settings.DEBUG, pool_pre_ping=settings.DB_POOL_PRE_PING, pool_size=settings.DB_POOL_SIZE, max_overflow=settings.DB_MAX_OVERFLOW, pool_timeout=settings.DB_POOL_TIMEOUT, ) # Создаем фабрику сессий SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Базовый класс для моделей Base = declarative_base() def get_db() -> Generator[Session, None, None]: """ Dependency для получения сессии базы данных """ db = SessionLocal() try: yield db finally: db.close() def init_db(): """Инициализация базы данных (создание таблиц)""" try: Base.metadata.create_all(bind=engine) logger.info("Database tables created successfully") except Exception as e: logger.error(f"Failed to create database tables: {e}") raise