38277-vm/core/models.py
Flatlogic Bot 7c25e47f16 Start
2026-02-07 21:07:29 +00:00

62 lines
2.3 KiB
Python

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
security_pin = models.CharField(max_length=4, blank=True, null=True)
deadman_pin = models.CharField(max_length=4, blank=True, null=True)
is_biometric_enabled = models.BooleanField(default=False)
last_wipe_at = models.DateTimeField(null=True, blank=True)
def __str__(self):
return f"Profile for {self.user.username}"
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
class Channel(models.Model):
PLATFORM_CHOICES = [
('whatsapp', 'WhatsApp Business'),
('messenger', 'Facebook Messenger'),
('instagram', 'Instagram Messages'),
('sms', 'SMS (Twilio)'),
('tiktok', 'TikTok Messages'),
]
name = models.CharField(max_length=50, choices=PLATFORM_CHOICES, unique=True)
is_active = models.BooleanField(default=False)
api_key = models.CharField(max_length=255, blank=True, null=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.get_name_display()
class Conversation(models.Model):
channel = models.ForeignKey(Channel, on_delete=models.CASCADE, related_name='conversations')
external_id = models.CharField(max_length=255) # ID from the platform
participant_name = models.CharField(max_length=255)
last_message_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.participant_name} ({self.channel.get_name_display()})"
class Message(models.Model):
conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE, related_name='messages')
body = models.TextField()
is_from_me = models.BooleanField(default=False)
timestamp = models.DateTimeField(auto_now_add=True)
external_id = models.CharField(max_length=255, blank=True, null=True)
class Meta:
ordering = ['timestamp']
def __str__(self):
return f"{'Me' if self.is_from_me else self.conversation.participant_name}: {self.body[:50]}"