30 lines
1.3 KiB
Python
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))
|