This commit is contained in:
@@ -2,14 +2,13 @@ from fastapi import APIRouter, Depends, HTTPException, status
|
|||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from core.rabbitmq import publish_ticket_paid_event
|
|
||||||
from database.models import Ticket, TicketStatus
|
from database.models import Ticket, TicketStatus
|
||||||
from database.session import get_db
|
from database.session import get_db
|
||||||
from schemas.payment import PaymentWebhookRequest
|
from schemas.payment import PaymentWebhookRequest
|
||||||
|
from core.rabbitmq import publish_ticket_task # Оставили только правильный импорт
|
||||||
|
|
||||||
router = APIRouter(prefix="/api/webhooks", tags=["webhooks"])
|
router = APIRouter(prefix="/api/webhooks", tags=["webhooks"])
|
||||||
|
|
||||||
|
|
||||||
@router.post("/payment", status_code=status.HTTP_200_OK)
|
@router.post("/payment", status_code=status.HTTP_200_OK)
|
||||||
async def payment_webhook(
|
async def payment_webhook(
|
||||||
body: PaymentWebhookRequest,
|
body: PaymentWebhookRequest,
|
||||||
@@ -24,7 +23,7 @@ async def payment_webhook(
|
|||||||
detail=f"Ticket {body.ticket_id} not found",
|
detail=f"Ticket {body.ticket_id} not found",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Idempotency guard: повторный запрос с тем же ключом — возвращаем 200 без действий
|
# Idempotency guard
|
||||||
if ticket.idempotency_key == body.idempotency_key:
|
if ticket.idempotency_key == body.idempotency_key:
|
||||||
return {"detail": "Already processed"}
|
return {"detail": "Already processed"}
|
||||||
|
|
||||||
@@ -38,6 +37,7 @@ async def payment_webhook(
|
|||||||
ticket.idempotency_key = body.idempotency_key
|
ticket.idempotency_key = body.idempotency_key
|
||||||
await db.commit()
|
await db.commit()
|
||||||
|
|
||||||
await publish_ticket_paid_event(ticket_id=ticket.id, user_id=ticket.user_id or 0)
|
# Вызываем нашу актуальную функцию отправки в очередь
|
||||||
|
await publish_ticket_task(ticket.id)
|
||||||
|
|
||||||
return {"detail": "Payment processed"}
|
return {"detail": "Payment processed"}
|
||||||
Reference in New Issue
Block a user