# 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"), ), ]