39491-vm/core/models.py
Flatlogic Bot db8313c88e V2
2026-04-05 20:23:53 +00:00

71 lines
2.1 KiB
Python

from django.db import models
from django.urls import reverse
class ResakaProfile(models.Model):
display_name = models.CharField(max_length=80)
handle = models.SlugField(max_length=80, unique=True)
status_text = models.CharField(max_length=140, blank=True)
avatar_color = models.CharField(max_length=7, default="#22D3EE")
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["display_name"]
def __str__(self):
return f"{self.display_name} (@{self.handle})"
class Conversation(models.Model):
starter = models.ForeignKey(
ResakaProfile,
on_delete=models.CASCADE,
related_name="started_conversations",
)
recipient = models.ForeignKey(
ResakaProfile,
on_delete=models.CASCADE,
related_name="received_conversations",
)
subject = models.CharField(max_length=120, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ["-updated_at", "-created_at"]
def __str__(self):
return self.subject or f"{self.starter.display_name}{self.recipient.display_name}"
def counterpart_for(self, profile):
if profile and self.starter_id == profile.id:
return self.recipient
return self.starter
def get_absolute_url(self):
return reverse("conversation_detail", args=[self.pk])
class Message(models.Model):
conversation = models.ForeignKey(
Conversation,
on_delete=models.CASCADE,
related_name="messages",
)
author = models.ForeignKey(
ResakaProfile,
on_delete=models.CASCADE,
related_name="messages",
)
body = models.TextField()
reaction = models.CharField(max_length=8, blank=True)
is_read = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ["created_at"]
def __str__(self):
preview = (self.body[:30] + "") if len(self.body) > 30 else self.body
return f"{self.author.display_name}: {preview}"