Update project
This commit is contained in:
@@ -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}"
|
||||
|
||||
Reference in New Issue
Block a user