Files
ai-ticket-platform/backend/apps/tickets/migrations/0001_initial.py
2026-06-30 18:31:45 +08:00

256 lines
9.6 KiB
Python

# Generated by Django 5.2.15 on 2026-06-30 10:31
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="Ticket",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("ticket_no", models.CharField(max_length=32, unique=True)),
("title", models.CharField(max_length=200)),
("description", models.TextField()),
(
"status",
models.CharField(
choices=[
("pending_info", "Pending info"),
("pending", "Pending"),
("in_progress", "In progress"),
("pending_confirm", "Pending confirm"),
("resolved", "Resolved"),
("closed", "Closed"),
],
default="pending",
max_length=32,
),
),
(
"priority",
models.CharField(
choices=[
("low", "Low"),
("medium", "Medium"),
("high", "High"),
("urgent", "Urgent"),
],
default="medium",
max_length=20,
),
),
("impact_scope", models.CharField(blank=True, max_length=80)),
("environment", models.CharField(blank=True, max_length=80)),
("related_system", models.CharField(blank=True, max_length=120)),
("created_at", models.DateTimeField(auto_now_add=True)),
("updated_at", models.DateTimeField(auto_now=True)),
("resolved_at", models.DateTimeField(blank=True, null=True)),
("closed_at", models.DateTimeField(blank=True, null=True)),
(
"assignee",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="assigned_tickets",
to=settings.AUTH_USER_MODEL,
),
),
(
"created_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="created_tickets",
to=settings.AUTH_USER_MODEL,
),
),
(
"requester",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="requested_tickets",
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"ordering": ["-created_at"],
},
),
migrations.CreateModel(
name="TicketAttachment",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("file_name", models.CharField(max_length=255)),
("file_type", models.CharField(blank=True, max_length=80)),
("mime_type", models.CharField(blank=True, max_length=120)),
("file_size", models.PositiveBigIntegerField(default=0)),
("storage_path", models.CharField(max_length=500)),
("ocr_text", models.TextField(blank=True)),
("parsed_text", models.TextField(blank=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"created_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
(
"ticket",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="attachments",
to="tickets.ticket",
),
),
],
),
migrations.CreateModel(
name="TicketCategory",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("name", models.CharField(max_length=120)),
("code", models.CharField(max_length=80, unique=True)),
("description", models.TextField(blank=True)),
("enabled", models.BooleanField(default=True)),
("sort_order", models.PositiveIntegerField(default=0)),
(
"parent",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="tickets.ticketcategory",
),
),
],
options={
"ordering": ["sort_order", "name"],
},
),
migrations.AddField(
model_name="ticket",
name="category",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to="tickets.ticketcategory",
),
),
migrations.CreateModel(
name="TicketComment",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("content", models.TextField()),
("comment_type", models.CharField(default="user", max_length=40)),
("visibility", models.CharField(default="internal", max_length=40)),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"created_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
(
"ticket",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="comments",
to="tickets.ticket",
),
),
],
options={
"ordering": ["created_at"],
},
),
migrations.CreateModel(
name="TicketEvent",
fields=[
(
"id",
models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
("event_type", models.CharField(max_length=80)),
("from_value", models.JSONField(blank=True, default=dict)),
("to_value", models.JSONField(blank=True, default=dict)),
("remark", models.TextField(blank=True)),
("created_at", models.DateTimeField(auto_now_add=True)),
(
"operator",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
(
"ticket",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="events",
to="tickets.ticket",
),
),
],
options={
"ordering": ["created_at"],
},
),
migrations.AddIndex(
model_name="ticket",
index=models.Index(fields=["ticket_no"], name="tickets_tic_ticket__c7390a_idx"),
),
migrations.AddIndex(
model_name="ticket",
index=models.Index(fields=["status", "priority"], name="tickets_tic_status_b256f6_idx"),
),
migrations.AddIndex(
model_name="ticket",
index=models.Index(fields=["created_at"], name="tickets_tic_created_5dd600_idx"),
),
]