Some checks are pending
lint / lint (push) Waiting to run
Adds a public events endpoint that allows read-only access to all events. Improves ticket management by adding support for user IDs as an identifier, alongside name and email. This simplifies ticket creation for authenticated users and enhances security. Also introduces an API endpoint to fetch tickets by user ID.
37 lines
1.1 KiB
Python
37 lines
1.1 KiB
Python
import asyncio
|
|
|
|
from lnbits.core.models import Payment
|
|
from lnbits.tasks import register_invoice_listener
|
|
from loguru import logger
|
|
|
|
from .crud import get_ticket
|
|
from .services import set_ticket_paid
|
|
|
|
|
|
async def wait_for_paid_invoices():
|
|
invoice_queue = asyncio.Queue()
|
|
register_invoice_listener(invoice_queue, "ext_events")
|
|
|
|
while True:
|
|
payment = await invoice_queue.get()
|
|
await on_invoice_paid(payment)
|
|
|
|
|
|
async def on_invoice_paid(payment: Payment) -> None:
|
|
if not payment.extra or "events" != payment.extra.get("tag"):
|
|
return
|
|
|
|
# Check if ticket has either name/email or user_id
|
|
has_name_email = payment.extra.get("name") and payment.extra.get("email")
|
|
has_user_id = payment.extra.get("user_id")
|
|
|
|
if not has_name_email and not has_user_id:
|
|
logger.warning(f"Ticket {payment.payment_hash} missing name/email or user_id.")
|
|
return
|
|
|
|
ticket = await get_ticket(payment.payment_hash)
|
|
if not ticket:
|
|
logger.warning(f"Ticket for payment {payment.payment_hash} not found.")
|
|
return
|
|
|
|
await set_ticket_paid(ticket)
|