import logging from django.db import transaction from .models import PaymentEvent logger = logging.getLogger(__name__) def record(event: str, *, order=None, user_id=None, provider: str = '', **detail) -> None: """ یک ردیف در PaymentEvent می‌نویسد. شکستِ نوشتن *را می‌بلعد ولی لاگ می‌کند* (logger.exception): این دفتر فقط ردگیری است و خطایش نباید پرداختِ کاربر را بشکند یا سفارشِ پرداخت‌شده را ناتمام بگذارد. savepoint دارد تا خطای این insert تراکنشِ بیرونی را در Postgres خراب نکند. زیرِ فشار/قطعیِ دیتابیس آزموده نشده. """ try: with transaction.atomic(): PaymentEvent.objects.create( order_id=order.id if order is not None else None, user_id=user_id if user_id is not None else (order.user_id if order is not None else None), provider=provider or (order.provider if order is not None else ''), event=event, detail=detail, ) except Exception: logger.exception('payment event %s could not be recorded (order=%s)', event, getattr(order, 'id', None))