"""Transaction helpers."""

from __future__ import annotations

from contextlib import asynccontextmanager

from bot.infra.db.manager import db_manager


@asynccontextmanager
async def transaction():
    conn = await db_manager.connection()

    try:
        await conn.execute("BEGIN")
        yield conn
        await conn.commit()

    except Exception:
        await conn.rollback()
        raise
