operations_project/apps/gmail/models.py

72 lines
3.8 KiB
Python
Raw Normal View History

2025-05-07 18:01:48 +08:00
# apps/gmail/models.py
from django.db import models
from django.utils import timezone
import uuid
from apps.accounts.models import User
from apps.knowledge_base.models import KnowledgeBase
from apps.chat.models import ChatHistory # 更新导入路径
class GmailCredential(models.Model):
"""Gmail账号凭证"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='gmail_credentials')
gmail_email = models.EmailField(verbose_name='Gmail邮箱', max_length=255, default='your_default_email@example.com')
name = models.CharField(verbose_name='名称', max_length=100, default='默认Gmail')
credentials = models.TextField(verbose_name='凭证JSON', blank=True, null=True)
token_path = models.CharField(verbose_name='令牌路径', max_length=255, blank=True, null=True)
is_default = models.BooleanField(verbose_name='是否默认', default=False)
last_history_id = models.CharField(verbose_name='最后历史ID', max_length=100, blank=True, null=True)
watch_expiration = models.DateTimeField(verbose_name='监听过期时间', blank=True, null=True)
is_active = models.BooleanField(verbose_name='是否活跃', default=True)
created_at = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
updated_at = models.DateTimeField(verbose_name='更新时间', auto_now=True)
gmail_credential_id = models.CharField(verbose_name='Gmail凭证ID', max_length=255, blank=True, null=True)
needs_reauth = models.BooleanField(verbose_name='需要重新授权', default=False)
def __str__(self):
return f"{self.name} ({self.gmail_email})"
class Meta:
verbose_name = 'Gmail凭证'
verbose_name_plural = 'Gmail凭证'
unique_together = ('user', 'gmail_email')
ordering = ['-is_default', '-updated_at']
class GmailTalentMapping(models.Model):
"""Gmail达人映射关系模型"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='gmail_talent_mappings')
talent_email = models.EmailField(verbose_name='达人邮箱')
knowledge_base = models.ForeignKey(KnowledgeBase, on_delete=models.CASCADE, related_name='gmail_mappings')
conversation_id = models.CharField(max_length=100, verbose_name='对话ID')
is_active = models.BooleanField(default=True, verbose_name='是否激活')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
class Meta:
db_table = 'gmail_talent_mappings'
unique_together = ['user', 'talent_email']
verbose_name = 'Gmail达人映射'
verbose_name_plural = 'Gmail达人映射'
def __str__(self):
return f"{self.user.username} - {self.talent_email}"
class GmailAttachment(models.Model):
"""Gmail附件模型"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
chat_message = models.ForeignKey(ChatHistory, on_delete=models.CASCADE, related_name='gmail_attachments')
gmail_message_id = models.CharField(max_length=100, verbose_name='Gmail消息ID')
filename = models.CharField(max_length=255, verbose_name='文件名')
filepath = models.CharField(max_length=500, verbose_name='文件路径')
mimetype = models.CharField(max_length=100, verbose_name='MIME类型')
filesize = models.IntegerField(default=0, verbose_name='文件大小')
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
db_table = 'gmail_attachments'
verbose_name = 'Gmail附件'
verbose_name_plural = 'Gmail附件'
def __str__(self):
return f"{self.filename} ({self.filesize} bytes)"