feat: consolidate ticket domain baseline

This commit is contained in:
hailin
2026-07-27 18:57:51 +08:00
parent 5015e4407d
commit 96452934a3
25 changed files with 4236 additions and 218 deletions

View File

@@ -0,0 +1,142 @@
# Generated by Django 5.2.15 on 2026-07-25 03:25
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('tickets', '0004_ticketdraft_ticketdraftimage_ticketdraftmessage_and_more'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='TicketCollaborator',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(choices=[('collaborator', 'Collaborator'), ('watcher', 'Watcher')], default='collaborator', max_length=24)),
('created_at', models.DateTimeField(auto_now_add=True)),
],
options={
'ordering': ['created_at'],
},
),
migrations.CreateModel(
name='TicketFieldEvidence',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('field_name', models.CharField(max_length=80)),
('value', models.JSONField(blank=True, null=True)),
('source', models.CharField(choices=[('human', 'Human'), ('agent', 'Agent'), ('channel', 'Channel'), ('system', 'System')], default='human', max_length=24)),
('confidence', models.DecimalField(blank=True, decimal_places=4, max_digits=5, null=True)),
('evidence', models.JSONField(blank=True, default=dict)),
('agent_run_id', models.BigIntegerField(blank=True, null=True)),
('is_protected', models.BooleanField(default=False)),
('created_at', models.DateTimeField(auto_now_add=True)),
],
options={
'ordering': ['field_name', '-created_at'],
},
),
migrations.RemoveField(
model_name='ticket',
name='ai_solution',
),
migrations.RemoveField(
model_name='ticket',
name='is_resolved',
),
migrations.RemoveField(
model_name='ticket',
name='resolution_summary',
),
migrations.AddField(
model_name='ticket',
name='archived_at',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='ticket',
name='archived_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='archived_tickets', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='ticket',
name='customer_last_message_at',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='ticket',
name='problem_started_at',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='ticket',
name='support_first_response_at',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='ticket',
name='support_last_reply_at',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AddField(
model_name='ticketevent',
name='agent_run_id',
field=models.BigIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='ticketevent',
name='metadata',
field=models.JSONField(blank=True, default=dict),
),
migrations.AddField(
model_name='ticketevent',
name='source',
field=models.CharField(choices=[('human', 'Human'), ('agent', 'Agent'), ('channel', 'Channel'), ('system', 'System')], default='human', max_length=24),
),
migrations.AddIndex(
model_name='ticket',
index=models.Index(fields=['archived_at'], name='tickets_tic_archive_f5fa74_idx'),
),
migrations.AddField(
model_name='ticketcollaborator',
name='added_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='added_ticket_collaborators', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='ticketcollaborator',
name='ticket',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='collaborators', to='tickets.ticket'),
),
migrations.AddField(
model_name='ticketcollaborator',
name='user',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='ticket_collaborations', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='ticketfieldevidence',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ticket_field_evidence', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='ticketfieldevidence',
name='ticket',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='field_evidence', to='tickets.ticket'),
),
migrations.AddConstraint(
model_name='ticketcollaborator',
constraint=models.UniqueConstraint(fields=('ticket', 'user', 'role'), name='unique_ticket_user_collaborator_role'),
),
migrations.AddIndex(
model_name='ticketfieldevidence',
index=models.Index(fields=['ticket', 'field_name', 'created_at'], name='tickets_tic_ticket__e9538c_idx'),
),
migrations.AddIndex(
model_name='ticketfieldevidence',
index=models.Index(fields=['source', 'agent_run_id'], name='tickets_tic_source_c062b8_idx'),
),
]