Update project 3 iteration feat: core booking pipeline, webhook and async pdf worker CORE COPLETE

This commit is contained in:
2026-03-06 10:46:04 +00:00
parent d09bb99e9e
commit 50221c57e1
5 changed files with 125 additions and 0 deletions

34
backend/core/rabbitmq.py Normal file
View File

@@ -0,0 +1,34 @@
import json
import os
import aio_pika
RABBITMQ_URL: str = os.getenv("RABBITMQ_URL", "amqp://user:password@rabbitmq/")
QUEUE_NAME: str = "ticket_events"
async def publish_ticket_paid_event(ticket_id: int, user_id: int) -> None:
"""Публикует событие ticket_paid в очередь RabbitMQ.
Формат совпадает с тем, что ожидает worker.py:
{"action": "ticket_paid", "ticket_id": <int>, "user_id": <int>}
"""
connection = await aio_pika.connect_robust(RABBITMQ_URL)
async with connection:
channel = await connection.channel()
# durable=True — очередь переживёт перезапуск брокера
queue = await channel.declare_queue(QUEUE_NAME, durable=True)
body = json.dumps(
{"action": "ticket_paid", "ticket_id": ticket_id, "user_id": user_id}
).encode()
await channel.default_exchange.publish(
aio_pika.Message(
body=body,
delivery_mode=aio_pika.DeliveryMode.PERSISTENT,
content_type="application/json",
),
routing_key=queue.name,
)