"""Async Postgres pool.""" import asyncpg from app.config import settings _pool: asyncpg.Pool | None = None async def init_pool() -> None: global _pool _pool = await asyncpg.create_pool( dsn=settings.dsn, min_size=2, max_size=10, command_timeout=5, ) async def close_pool() -> None: global _pool if _pool is not None: await _pool.close() _pool = None def get_pool() -> asyncpg.Pool: if _pool is None: raise RuntimeError("DB pool not initialized") return _pool async def fetch(query: str, *args) -> list[asyncpg.Record]: async with get_pool().acquire() as conn: return await conn.fetch(query, *args) async def fetchrow(query: str, *args) -> asyncpg.Record | None: async with get_pool().acquire() as conn: return await conn.fetchrow(query, *args) async def fetchval(query: str, *args): async with get_pool().acquire() as conn: return await conn.fetchval(query, *args)