52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
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()
|