Modelos de Dados¶
Model Email¶
O modelo principal do sistema que representa um email e sua classificação.
Campos¶
Campo | Tipo | Descrição |
---|---|---|
id |
BigAutoField | Chave primária |
subject |
CharField(200) | Assunto do email |
content |
TextField | Conteúdo completo do email |
sender |
EmailField | Email do remetente |
file |
FileField | Arquivo enviado (opcional) |
file_type |
CharField(10) | Tipo do arquivo (pdf, txt) |
category |
CharField(20) | Categoria: 'productive' ou 'unproductive' |
suggested_response |
TextField | Resposta sugerida pela IA |
created_at |
DateTimeField | Data/hora de criação |
confidence_score |
FloatField | Nível de confiança (0-100) |
classification_method |
CharField(20) | Método usado: 'gemini' ou 'heuristic' |
Choices¶
Category¶
productive
: Emails que requerem ação, contêm problemas, perguntas, solicitaçõesunproductive
: Emails de parabéns, agradecimentos, newsletters, convites
Métodos¶
category_display
¶
@property
def category_display(self):
"""Retorna o valor de exibição da categoria"""
return dict(self._meta.get_field('category').choices).get(self.category, self.category)
is_productive
¶
Índices de Banco¶
Para otimização de consultas:
- category
: Filtros por categoria
- created_at
: Ordenação cronológica
- sender
: Busca por remetente
Upload de Arquivos¶
Função get_upload_path
¶
def get_upload_path(instance, filename):
"""Define o caminho para upload de arquivos de email"""
ext = filename.split('.')[-1]
subject_slug = slugify(instance.subject[:30])
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
return f'uploads/{instance.sender.split("@")[0]}_{subject_slug}_{timestamp}.{ext}'
Formato do path: uploads/{username}_{subject-slug}_{timestamp}.{ext}
Validações¶
subject
: Máximo 200 caracteressender
: Deve ser um email válidofile_type
: Apenas 'pdf' ou 'txt' permitidosconfidence_score
: Valor entre 0.0 e 100.0