202 lines
10 KiB
Python
202 lines
10 KiB
Python
# Generated by Django 4.2.7 on 2025-09-14 20:10
|
|
|
|
from django.conf import settings
|
|
import django.core.validators
|
|
from django.db import migrations, models
|
|
import django.db.models.deletion
|
|
import uuid
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name='Email',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
|
('subject', models.CharField(max_length=500)),
|
|
('from_email', models.EmailField(max_length=254)),
|
|
('to_emails', models.JSONField(default=list)),
|
|
('cc_emails', models.JSONField(default=list)),
|
|
('bcc_emails', models.JSONField(default=list)),
|
|
('reply_to', models.EmailField(blank=True, max_length=254, null=True)),
|
|
('body_text', models.TextField(blank=True)),
|
|
('body_html', models.TextField(blank=True)),
|
|
('message_id', models.CharField(blank=True, max_length=500, null=True, unique=True)),
|
|
('in_reply_to', models.CharField(blank=True, max_length=500, null=True)),
|
|
('references', models.TextField(blank=True)),
|
|
('priority', models.CharField(choices=[('low', 'Low'), ('normal', 'Normal'), ('high', 'High')], default='normal', max_length=10)),
|
|
('status', models.CharField(choices=[('draft', 'Draft'), ('sent', 'Sent'), ('received', 'Received'), ('failed', 'Failed')], default='draft', max_length=20)),
|
|
('is_read', models.BooleanField(default=False)),
|
|
('is_starred', models.BooleanField(default=False)),
|
|
('is_important', models.BooleanField(default=False)),
|
|
('is_encrypted', models.BooleanField(default=False)),
|
|
('sent_at', models.DateTimeField(blank=True, null=True)),
|
|
('received_at', models.DateTimeField(blank=True, null=True)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('size', models.BigIntegerField(default=0)),
|
|
],
|
|
options={
|
|
'db_table': 'emails',
|
|
'ordering': ['-created_at'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailThread',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('subject', models.CharField(max_length=500)),
|
|
('participants', models.JSONField(default=list)),
|
|
('last_activity', models.DateTimeField(auto_now=True)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('emails', models.ManyToManyField(related_name='threads', to='emails.email')),
|
|
],
|
|
options={
|
|
'db_table': 'email_threads',
|
|
'ordering': ['-last_activity'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailSignature',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=100)),
|
|
('content_html', models.TextField()),
|
|
('content_text', models.TextField(blank=True)),
|
|
('is_default', models.BooleanField(default=False)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='email_signatures', to=settings.AUTH_USER_MODEL)),
|
|
],
|
|
options={
|
|
'db_table': 'email_signatures',
|
|
'ordering': ['name'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailRule',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=100)),
|
|
('is_active', models.BooleanField(default=True)),
|
|
('condition_field', models.CharField(max_length=50)),
|
|
('condition_operator', models.CharField(max_length=20)),
|
|
('condition_value', models.CharField(max_length=500)),
|
|
('action', models.CharField(choices=[('move', 'Move to folder'), ('mark_read', 'Mark as read'), ('mark_important', 'Mark as important'), ('forward', 'Forward to'), ('delete', 'Delete'), ('reply', 'Auto-reply')], max_length=20)),
|
|
('action_value', models.CharField(blank=True, max_length=500)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='email_rules', to=settings.AUTH_USER_MODEL)),
|
|
],
|
|
options={
|
|
'db_table': 'email_rules',
|
|
'ordering': ['name'],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailFolder',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=100)),
|
|
('folder_type', models.CharField(choices=[('inbox', 'Inbox'), ('sent', 'Sent'), ('drafts', 'Drafts'), ('trash', 'Trash'), ('spam', 'Spam'), ('archive', 'Archive'), ('custom', 'Custom')], default='custom', max_length=20)),
|
|
('color', models.CharField(default='#007bff', max_length=7)),
|
|
('is_system', models.BooleanField(default=False)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='emails.emailfolder')),
|
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='folders', to=settings.AUTH_USER_MODEL)),
|
|
],
|
|
options={
|
|
'db_table': 'email_folders',
|
|
'ordering': ['name'],
|
|
'unique_together': {('user', 'name')},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailAttachment',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('filename', models.CharField(max_length=255)),
|
|
('content_type', models.CharField(max_length=100)),
|
|
('size', models.BigIntegerField()),
|
|
('file', models.FileField(upload_to='email_attachments/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf', 'doc', 'docx', 'txt', 'jpg', 'jpeg', 'png', 'gif', 'zip', 'rar'])])),
|
|
('is_inline', models.BooleanField(default=False)),
|
|
('content_id', models.CharField(blank=True, max_length=100)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('email', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='emails.email')),
|
|
],
|
|
options={
|
|
'db_table': 'email_attachments',
|
|
'ordering': ['filename'],
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name='email',
|
|
name='folder',
|
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='emails', to='emails.emailfolder'),
|
|
),
|
|
migrations.AddField(
|
|
model_name='email',
|
|
name='user',
|
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='emails', to=settings.AUTH_USER_MODEL),
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailTemplate',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=100)),
|
|
('subject', models.CharField(max_length=500)),
|
|
('body_html', models.TextField()),
|
|
('body_text', models.TextField(blank=True)),
|
|
('is_public', models.BooleanField(default=False)),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('updated_at', models.DateTimeField(auto_now=True)),
|
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='email_templates', to=settings.AUTH_USER_MODEL)),
|
|
],
|
|
options={
|
|
'db_table': 'email_templates',
|
|
'ordering': ['name'],
|
|
'unique_together': {('user', 'name')},
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name='EmailSearch',
|
|
fields=[
|
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
('name', models.CharField(max_length=100)),
|
|
('query', models.JSONField()),
|
|
('created_at', models.DateTimeField(auto_now_add=True)),
|
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='email_searches', to=settings.AUTH_USER_MODEL)),
|
|
],
|
|
options={
|
|
'db_table': 'email_searches',
|
|
'ordering': ['name'],
|
|
'unique_together': {('user', 'name')},
|
|
},
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='email',
|
|
index=models.Index(fields=['user', 'folder', '-created_at'], name='emails_user_id_ceecc1_idx'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='email',
|
|
index=models.Index(fields=['user', 'is_read'], name='emails_user_id_005dbe_idx'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='email',
|
|
index=models.Index(fields=['user', 'is_starred'], name='emails_user_id_11204a_idx'),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name='email',
|
|
index=models.Index(fields=['message_id'], name='emails_message_7b58ef_idx'),
|
|
),
|
|
]
|