from django.db import models from django.core.validators import MinValueValidator, MaxValueValidator class Review(models.Model): STATUS_PENDING = 'pending' STATUS_LIVE = 'live' STATUS_REJECTED = 'rejected' STATUS_CHOICES = [ (STATUS_PENDING, 'Pending'), (STATUS_LIVE, 'Live'), (STATUS_REJECTED, 'Rejected'), ] REJECT_CHOICES = [ ('spam', 'Spam'), ('inappropriate', 'Inappropriate'), ('fake', 'Fake'), ] reviewer = models.ForeignKey( 'accounts.User', on_delete=models.CASCADE, related_name='admin_reviews' ) event = models.ForeignKey( 'events.Event', on_delete=models.CASCADE, related_name='admin_reviews' ) rating = models.IntegerField( validators=[MinValueValidator(1), MaxValueValidator(5)] ) review_text = models.TextField() submission_date = models.DateTimeField(auto_now_add=True) status = models.CharField( max_length=10, choices=STATUS_CHOICES, default=STATUS_PENDING ) reject_reason = models.CharField( max_length=15, choices=REJECT_CHOICES, null=True, blank=True ) display_name = models.CharField(max_length=100, blank=True, default='') is_verified = models.BooleanField(default=False) helpful_count = models.IntegerField(default=0) flag_count = models.IntegerField(default=0) class Meta: ordering = ['-submission_date'] indexes = [ models.Index(fields=['status']), models.Index(fields=['submission_date']), ] def __str__(self): return f'Review #{self.pk} by {self.reviewer_id} — {self.status}' class ReviewInteraction(models.Model): INTERACTION_CHOICES = [('HELPFUL', 'Helpful'), ('FLAG', 'Flag')] review = models.ForeignKey(Review, on_delete=models.CASCADE, related_name='interactions') username = models.CharField(max_length=255) interaction_type = models.CharField(max_length=20, choices=INTERACTION_CHOICES) created_at = models.DateTimeField(auto_now_add=True) class Meta: unique_together = ('review', 'username', 'interaction_type') def __str__(self): return f'{self.username} {self.interaction_type} on Review #{self.review_id}'