Spaces:
Build error
Build error
| from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker | |
| from sqlalchemy.orm import DeclarativeBase | |
| from app.core.config import settings | |
| # Production: use DATABASE_URL (e.g. Supabase connection string) | |
| # Local dev: construct from individual POSTGRES_* settings | |
| if settings.DATABASE_URL: | |
| DATABASE_URL = settings.DATABASE_URL | |
| # Ensure asyncpg driver prefix | |
| if DATABASE_URL.startswith("postgres://"): | |
| DATABASE_URL = DATABASE_URL.replace("postgres://", "postgresql+asyncpg://", 1) | |
| elif DATABASE_URL.startswith("postgresql://"): | |
| DATABASE_URL = DATABASE_URL.replace("postgresql://", "postgresql+asyncpg://", 1) | |
| else: | |
| DATABASE_URL = f"postgresql+asyncpg://{settings.POSTGRES_USER}:{settings.POSTGRES_PASSWORD}@{settings.POSTGRES_HOST}:{settings.POSTGRES_PORT}/{settings.POSTGRES_DB}" | |
| engine = create_async_engine(DATABASE_URL, echo=False) | |
| async_session_factory = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False) | |
| class Base(DeclarativeBase): | |
| pass | |
| async def get_db() -> AsyncSession: | |
| async with async_session_factory() as session: | |
| try: | |
| yield session | |
| await session.commit() | |
| except Exception: | |
| await session.rollback() | |
| raise | |
| finally: | |
| await session.close() | |