You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.8 KiB
60 lines
1.8 KiB
|
|
from django.db import models
|
|
|
|
from apps.account.models import User, ProfessorUser
|
|
from apps.course.models import Course
|
|
|
|
|
|
class ChatMessage(models.Model):
|
|
class ChatTypeChoices(models.TextChoices):
|
|
TEXT = 'text', 'Text'
|
|
FILE = 'file', 'File'
|
|
AUDIO = 'audio', 'Audio'
|
|
IMAGE = 'image', 'Image'
|
|
|
|
course = models.ForeignKey(
|
|
Course,
|
|
on_delete=models.CASCADE,
|
|
related_name="messages",
|
|
verbose_name="Course"
|
|
)
|
|
sender = models.ForeignKey(
|
|
User,
|
|
on_delete=models.CASCADE,
|
|
related_name="messages_sent",
|
|
verbose_name="Sender"
|
|
)
|
|
recipient = models.ForeignKey(
|
|
User,
|
|
on_delete=models.CASCADE,
|
|
related_name="messages_received",
|
|
verbose_name="Recipient",
|
|
null=True,
|
|
blank=True
|
|
|
|
)
|
|
content = models.TextField(verbose_name="Message Content")
|
|
content_type = models.CharField(
|
|
max_length=10,
|
|
choices=ChatTypeChoices.choices,
|
|
default=ChatTypeChoices.TEXT,
|
|
verbose_name="Chat Type"
|
|
)
|
|
content_size = models.PositiveIntegerField(
|
|
verbose_name="Content Size (bytes)",
|
|
blank=True,
|
|
null=True
|
|
)
|
|
is_to_professor = models.BooleanField(default=False, verbose_name="Is to Professor")
|
|
|
|
sent_at = models.DateTimeField(auto_now_add=True, verbose_name="Sent At")
|
|
updated_at = models.DateTimeField(auto_now=True, verbose_name="Updated At")
|
|
deleted_at = models.DateTimeField(null=True, blank=True, verbose_name="Deleted At")
|
|
is_deleted = models.BooleanField(default=False, verbose_name="Is deleted")
|
|
|
|
def __str__(self):
|
|
return f"Message from {self.sender} to {self.recipient or 'Group'} in {self.course.title}"
|
|
|
|
|
|
|
|
|