Update project

This commit is contained in:
2026-08-19 17:15:55 +03:30
parent 02d40e1238
commit f945f960c9
25 changed files with 1092 additions and 287 deletions

View File

@@ -47,6 +47,25 @@ class Transaction(models.Model):
class Meta:
ordering = ['created_at']
constraints = [
# 🔒 یکتاییِ سراسریِ (gateway, gateway_ref_id) برای refهای
# غیرخالی: این قید سطح DB تضمین می‌کنه یک gateway_ref_id مشخص
# (مثلاً Authority زرین‌پال یا purchaseToken بازار) در کل جدول
# Transaction فقط می‌تونه متعلق به یک Order باشه — هم جلوی
# duplicate/idempotency برای همون Order رو می‌گیره (چون در کل
# جدول حداکثر یک ردیف با این (gateway, ref) می‌تونه وجود داشته
# باشه) و هم جلوی reuse/replay همون ref برای یک Order دیگه رو
# (نگاه کنید به apply_order_payment_result). این قید، قیدِ
# قدیمی‌ترِ (order, gateway_ref_id, status) رو هم در برمی‌گیره
# (چون سخت‌گیرانه‌تره)، برای همین دیگه لازم نیست جدا نگه داشته
# بشه. gateway_ref_id__gt='' یعنی رفرنس‌های خالی (که provider
# واقعی هنوز رفرنسی برنگردونده) مشمول این قید نمی‌شن.
models.UniqueConstraint(
fields=['gateway', 'gateway_ref_id'],
condition=models.Q(gateway_ref_id__gt=''),
name='uniq_transaction_gateway_ref_global',
),
]
def __str__(self):
return f"txn-{self.pk}-order{self.order_id}"