from typing import Optional from sqlalchemy import select from db.models import Invoice from sqlalchemy.ext.asyncio import AsyncSession from db.models.invoices import InvoiceStatus class InvoiceRepository: async def create_invoice( self, session: AsyncSession, *, amount: int, creator_id: int, inline_message_id: Optional[int] = None, status: InvoiceStatus = InvoiceStatus.PENDING, ) -> Invoice: invoice = Invoice( creator_id=creator_id, amount=amount, status=status, inline_message_id=inline_message_id, ) session.add(invoice) await session.commit() return invoice async def get_invoice_by_id( self, session: AsyncSession, invoice_id: int ) -> Optional[Invoice]: stmt = select(Invoice).where(Invoice.id == invoice_id) return await session.scalar(stmt) async def update_invoice_msg( self, session: AsyncSession, *, invoice_id: int, inline_message_id: int ): invoice = await self.get_invoice_by_id(session, invoice_id) invoice.inline_message_id = inline_message_id await session.commit() async def update_invoice_status( self, session: AsyncSession, *, invoice_id: int, status: InvoiceStatus ): invoice = await self.get_invoice_by_id(session, invoice_id) invoice.status = status await session.commit()