cleanup: trim bloated multi-line comments across the project

This commit is contained in:
2026-08-26 03:22:20 +03:30
parent 83435c5a5f
commit 683bd40169
27 changed files with 235 additions and 699 deletions

View File

@@ -27,18 +27,11 @@ def apply_offer(*, user_id: int, offer: Offer, source: str) -> UserOffer | None:
if not offer.is_active:
return None
# ⚠️ اصلاح: قبلاً هر IntegrityError داخل کل بلوکِ atomic (که شاملِ
# grant_free_subscription هم می‌شد) به‌عنوان «duplicate UserOffer»
# تفسیر می‌شد و None برمی‌گردوند — یعنی اگه یک IntegrityError واقعیِ
# دیگه (مثلاً داخل grant_free_subscription) اتفاق می‌افتاد، خطا قورت
# داده می‌شد و caller فکر می‌کرد «کاربر قبلاً این آفر رو گرفته»، در
# حالی که اصلاً چنین چیزی نبود. حالا فقط IntegrityError ناشی از
# UniqueConstraintِ خودِ UserOffer.create (duplicate واقعی) گرفته
# می‌شه — با یک savepoint جداگانه (atomic تودرتو) که فقط همون create
# رو rollback می‌کنه، نه کل تراکنش رو — و خطاهای دیگه (مثلاً از داخل
# grant_free_subscription) عادی propagate می‌شن. atomic بودنِ کلِ
# عملیات (UserOffer + Subscription + expires_at) هم دست‌نخورده باقی
# مونده، دقیقاً طبق همون دلیلی که در docstring بالا توضیح داده شده.
# فقط IntegrityErrorِ ناشیِ از UniqueConstraintِ خودِ UserOffer.create
# (duplicate واقعی) اینجا گرفته می‌شه، با یک savepoint مجزا که فقط
# همون create رو rollback می‌کنه — وگرنه یک IntegrityErrorِ دیگه (مثلاً
# داخلِ grant_free_subscription) قورت داده می‌شد و caller اشتباهاً فکر
# می‌کرد کاربر قبلاً این آفر رو گرفته.
with transaction.atomic():
try:
with transaction.atomic(): # savepoint مجزا فقط برای create