from __future__ import annotations from sqlalchemy import create_engine, text from sqlalchemy.engine import Engine from app.config import settings _engine: Engine | None = None def get_engine() -> Engine: global _engine if _engine is None: _engine = create_engine(settings.database_url, pool_pre_ping=True, future=True) return _engine def ping() -> dict[str, object]: """Smoke-test: DB 연결 + 확장 확인.""" eng = get_engine() with eng.connect() as conn: version = conn.execute(text("SELECT version()")).scalar() exts = conn.execute( text( "SELECT extname FROM pg_extension " "WHERE extname IN ('timescaledb','vector','pg_trgm') ORDER BY extname" ) ).scalars().all() return {"server": version, "extensions": list(exts)}