This commit is contained in:
2026-04-09 19:28:41 +03:00
commit 9fa723bb4c
43 changed files with 2804 additions and 0 deletions

45
app/database.py Normal file
View File

@@ -0,0 +1,45 @@
# 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