Files
MathApp/discount/models.py
2026-08-11 16:43:12 +03:30

35 lines
1.5 KiB
Python

from django.db import models
class DiscountCode(models.Model):
TYPE_CHOICES = [('percent', 'درصدی'), ('fixed', 'مبلغ ثابت')]
code = models.CharField(max_length=30, unique=True)
type = models.CharField(max_length=10, choices=TYPE_CHOICES)
value = models.PositiveIntegerField()
max_uses = models.PositiveIntegerField(default=1)
expires_at = models.DateTimeField(null=True, blank=True)
def __str__(self):
return self.code
class Redemption(models.Model):
discount_code = models.ForeignKey(DiscountCode, on_delete=models.CASCADE, related_name='redemptions')
user_id = models.IntegerField(db_index=True) # ارجاع سبک به accounts.User
order_id = models.IntegerField() # ارجاع سبک به payment.Order
redeemed_at = models.DateTimeField(auto_now_add=True)
class Meta:
# هر کاربر برای یک کد تخفیف حداکثر یک‌بار می‌تونه redeem کنه؛
# قبلاً هیچ محدودیتی در سطح دیتابیس نبود و همراه با نبود چک max_uses
# در RedeemDiscountView، امکان استفاده‌ی نامحدود از یک کد وجود داشت.
constraints = [
models.UniqueConstraint(
fields=['discount_code', 'user_id'], name='unique_redemption_per_user_per_code'
)
]
def __str__(self):
return f"redemption-{self.discount_code_id}-order{self.order_id}"