from sqlmodel import SQLModel from sqlalchemy.ext.asyncio import create_async_engine from sqlmodel.ext.asyncio.session import AsyncSession from core.config import get_settings settings = get_settings() async_engine = create_async_engine( settings.DATABASE_URL, echo=False, future=True, pool_pre_ping=True, pool_size=10, # The number of connections to keep open in the pool max_overflow=5, # The number of connections to allow in "overflow" pool_timeout=30, # How long to wait for a connection from the pool ) async def get_db(): """ Dependency function to get an async database session. Ensures the session is always closed after the request. """ async with AsyncSession(async_engine) as session: yield session async def create_db_and_tables(): """ Utility function to create database tables asynchronously. """ async with async_engine.begin() as conn: await conn.run_sync(SQLModel.metadata.create_all)