from aiogram import types, Router, F from sqlalchemy import select from app.core.logger import make_log from app.core.models import StarsInvoice router = Router() async def t_pre_checkout_query_stars_processing(pre_checkout_query: types.PreCheckoutQuery, user=None, db_session=None, chat_wrap=None, **extra): make_log('t_pre_checkout_query_stars_processing', f"PreCheckoutQuery: {pre_checkout_query}") make_log('t_pre_checkout_query_stars_processing', f"User: {user}, db_session: {db_session}, chat_wrap: {chat_wrap}, extra: {extra}") invoice_id = pre_checkout_query.invoice_payload result = await db_session.execute( select(StarsInvoice).where(StarsInvoice.external_id == invoice_id) ) existing_invoice = result.scalars().first() if not existing_invoice: return await pre_checkout_query.answer(ok=False, error_message="Invoice not found") if existing_invoice.paid: return await pre_checkout_query.answer(ok=False, error_message="Invoice already paid") return await pre_checkout_query.answer(ok=True) router.pre_checkout_query.register(t_pre_checkout_query_stars_processing)