Phase 7: Reviews Moderation — Review model + migration + 4 admin endpoints (metrics, list, moderate, delete)
This commit is contained in:
46
admin_api/models.py
Normal file
46
admin_api/models.py
Normal file
@@ -0,0 +1,46 @@
|
||||
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
|
||||
)
|
||||
|
||||
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}'
|
||||
Reference in New Issue
Block a user