codescraftman / contacts / models.py
models.py
Raw
from django.db import models
from django.contrib.auth.models import User

class Inquiry(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
    name = models.CharField(max_length=255)
    email = models.EmailField()
    subject = models.CharField(max_length=255)
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Inquiry from {self.name} - {self.subject}"

class LiveChat(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    admin_user = models.ForeignKey(User, related_name='admin_chats', null=True, blank=True, on_delete=models.SET_NULL)
    active = models.BooleanField(default=True)
    last_message = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Live Chat with {self.user.username}"

    def get_last_message(self):
        last_message = self.messages.order_by('-timestamp').first()
        return last_message.message if last_message else "No messages yet"

class ChatMessage(models.Model):
    chat = models.ForeignKey(LiveChat, related_name='messages', on_delete=models.CASCADE)
    sender = models.ForeignKey(User, on_delete=models.CASCADE)
    message = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)
    is_read = models.BooleanField(default=False)

    def __str__(self):
        return f"Message from {self.sender.username} at {self.timestamp}"

    def mark_as_read(self):
        self.is_read = True
        self.save()

class Notification(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='notifications', default=1)
    chat = models.ForeignKey(LiveChat, on_delete=models.CASCADE, related_name='notifications', null=True, blank=True)
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    read = models.BooleanField(default=False)

    def __str__(self):
        return self.message

    def mark_as_read(self):
        self.read = True
        self.save()