47 lines
1.5 KiB
Python
Executable File
47 lines
1.5 KiB
Python
Executable File
# /opt/docker/dev/service_finder/backend/app/database.py
|
|
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
|
|
from sqlalchemy.orm import DeclarativeBase
|
|
from app.core.config import settings
|
|
|
|
# 1. Base definíciója - Ezt importálják a modellek
|
|
class Base(DeclarativeBase):
|
|
"""
|
|
Központi SQLAlchemy Base osztály.
|
|
A modellek a 'from app.database import Base' segítségével érik el.
|
|
"""
|
|
pass
|
|
|
|
# 2. Engine és SessionLocal beállítása
|
|
engine = create_async_engine(
|
|
str(settings.SQLALCHEMY_DATABASE_URI),
|
|
echo=settings.DEBUG_MODE,
|
|
pool_size=20,
|
|
max_overflow=10,
|
|
pool_pre_ping=True,
|
|
)
|
|
|
|
AsyncSessionLocal = async_sessionmaker(
|
|
autocommit=False,
|
|
autoflush=False,
|
|
bind=engine,
|
|
class_=AsyncSession,
|
|
expire_on_commit=False
|
|
)
|
|
|
|
# 3. A "Körforgás-törő" függvény
|
|
def ensure_models_loaded():
|
|
"""
|
|
Dinamikusan betölti az összes modellt a regiszter segítségével.
|
|
Helyi importot használunk, hogy elkerüljük a körkörös függőséget:
|
|
database -> registry -> database (Base)
|
|
"""
|
|
try:
|
|
# Itt importálunk helyben, így a Base már létezik a memóriában
|
|
from app.models.registry import load_all_models
|
|
load_all_models()
|
|
print("✅ Adatbázis modellek regisztrálva a MetaData-ba.")
|
|
except ImportError as e:
|
|
print(f"⚠️ Hiba a modellek dinamikus betöltésekor: {e}")
|
|
|
|
# Automatikus betöltés meghívása (opcionális, de ajánlott az API indításakor)
|
|
# ensure_models_loaded() |