Files
MathApp/payment/events.py

30 lines
1.3 KiB
Python

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))