phase 3 22 qr-code-renew
This commit is contained in:
@@ -15,7 +15,7 @@ from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_asyn
|
||||
|
||||
from core.minio import ensure_bucket_exists, upload_pdf
|
||||
from core.pdf_generator import generate_qr_ticket
|
||||
from database.models import Ticket
|
||||
from database.models import Seat, Ticket, Tournament
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
@@ -40,22 +40,37 @@ async def _handle_ticket_paid(
|
||||
log.error("Event 'ticket_paid' missing 'ticket_id': %s", payload)
|
||||
return
|
||||
|
||||
result = await db_session.execute(select(Ticket).where(Ticket.id == ticket_id))
|
||||
ticket: Ticket | None = result.scalar_one_or_none()
|
||||
# JOIN: Ticket → Seat → Tournament (one query, no N+1)
|
||||
stmt = (
|
||||
select(Ticket, Seat, Tournament)
|
||||
.join(Seat, Ticket.seat_id == Seat.id)
|
||||
.join(Tournament, Seat.tournament_id == Tournament.id)
|
||||
.where(Ticket.id == ticket_id)
|
||||
)
|
||||
row = (await db_session.execute(stmt)).first()
|
||||
|
||||
if ticket is None:
|
||||
log.error("Ticket %s not found in DB", ticket_id)
|
||||
if row is None:
|
||||
log.error("Ticket %s (or related Seat/Tournament) not found in DB", ticket_id)
|
||||
return
|
||||
|
||||
ticket, seat, tournament = row
|
||||
|
||||
if ticket.pdf_url:
|
||||
log.info("Ticket %s already has a PDF, skipping (idempotency guard)", ticket_id)
|
||||
return
|
||||
|
||||
# Format event date: "DD.MM.YYYY HH:MM"
|
||||
date_str = tournament.event_date.strftime("%d.%m.%Y %H:%M")
|
||||
|
||||
log.info("Generating PDF for ticket %s …", ticket_id)
|
||||
pdf_bytes = generate_qr_ticket(
|
||||
ticket_id=ticket.id,
|
||||
user_id=ticket.user_id or 0,
|
||||
seat_id=ticket.seat_id,
|
||||
title=tournament.title,
|
||||
date_str=date_str,
|
||||
sector=seat.sector,
|
||||
row=seat.row,
|
||||
number=seat.number,
|
||||
price=seat.price,
|
||||
)
|
||||
|
||||
object_name = f"tickets/ticket_{ticket_id}.pdf"
|
||||
|
||||
Reference in New Issue
Block a user