from django.db import models class BugReport(models.Model): STATUS_CHOICES = [('open', 'باز'), ('resolved', 'برطرف‌شده')] user_id = models.IntegerField(db_index=True) # ارجاع سبک به accounts.User title = models.CharField(max_length=150) description = models.TextField() screenshot_url = models.URLField(blank=True) status = models.CharField(max_length=15, choices=STATUS_CHOICES, default='open') # ارجاع سبک اختیاری به Ticket (نه FK واقعی)؛ یعنی این باگ می‌تونه بعداً # به یک تیکت اسکیل بشه، ولی جوینی بین این دو مدل اجباری نیست. linked_ticket_id = models.IntegerField(null=True, blank=True) created_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['-created_at'] def __str__(self): return f"bug-{self.pk}-{self.title}" class Ticket(models.Model): STATUS_CHOICES = [('open', 'باز'), ('in_progress', 'در حال بررسی'), ('closed', 'بسته')] PRIORITY_CHOICES = [('low', 'کم'), ('normal', 'عادی'), ('high', 'بالا')] user_id = models.IntegerField(db_index=True) # ارجاع سبک به accounts.User subject = models.CharField(max_length=150) category = models.CharField(max_length=30) status = models.CharField(max_length=15, choices=STATUS_CHOICES, default='open') priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='normal') created_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['-created_at'] def __str__(self): return f"ticket-{self.pk}-{self.subject}" class TicketMessage(models.Model): SENDER_CHOICES = [('user', 'کاربر'), ('support', 'پشتیبانی')] ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name='messages') sender = models.CharField(max_length=10, choices=SENDER_CHOICES) text = models.TextField() created_at = models.DateTimeField(auto_now_add=True) class Meta: ordering = ['created_at'] def __str__(self): return f"tmsg-{self.pk}-ticket{self.ticket_id}-{self.sender}"