72 lines
3.8 KiB
Python
72 lines
3.8 KiB
Python
![]() |
# 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)"
|