feat: Add basic reporting structure

This commit is contained in:
2024-03-22 12:45:50 +01:00
parent 86f02214d7
commit 3516ca1d29
15 changed files with 277 additions and 5 deletions

View File

@@ -1,3 +1,5 @@
import uuid
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
@@ -180,6 +182,7 @@ class MarkdownContent(models.Model):
def __str__(self):
return self.title
class Rule(models.Model):
"""
Class to store rules
@@ -192,3 +195,55 @@ class Rule(models.Model):
def __str__(self):
return self.title
class Report(models.Model):
ACTION_TAKEN = "action taken"
NO_ACTION_TAKEN = "no action taken"
WAITING = "waiting"
STATES = {
ACTION_TAKEN: "Action was taken",
NO_ACTION_TAKEN: "No action was taken",
WAITING: "Waiting for moderator action",
}
id = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text=_('ID dieses reports'),
verbose_name=_('ID'))
status = models.CharField(max_length=30, choices=STATES)
reported_broken_rules = models.ManyToManyField(Rule, blank=True)
adoption_notice = models.ForeignKey("AdoptionNotice", on_delete=models.CASCADE)
comment = models.TextField(blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"[{self.status}]: {self.adoption_notice.name}"
def get_reported_rules(self):
return self.reported_broken_rules.all()
def get_moderation_actions(self):
return ModerationAction.objects.filter(report=self)
class ModerationAction(models.Model):
BAN = "user_banned"
DELETE = "content_deleted"
COMMENT = "comment"
OTHER = "other_action_taken"
NONE = "no_action_taken"
ACTIONS = {
BAN: "User was banned",
DELETE: "Content was deleted",
COMMENT: "Comment was added",
OTHER: "Other action was taken",
NONE: "No action was taken"
}
action = models.CharField(max_length=30, choices=ACTIONS.items())
created_at = models.DateTimeField(auto_now_add=True)
public_comment = models.TextField(blank=True)
# Only visible to moderator
private_comment = models.TextField(blank=True)
report = models.ForeignKey(Report, on_delete=models.CASCADE)
# TODO: Needs field for moderator that performed the action
def __str__(self):
return f"[{self.action}]: {self.public_comment}"