import uuid import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ("contenttypes", "0002_remove_content_type_name"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="MediaAsset", fields=[ ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ("created_at", models.DateTimeField(auto_now_add=True, db_index=True)), ("updated_at", models.DateTimeField(auto_now=True)), ("deleted_at", models.DateTimeField(blank=True, db_index=True, null=True)), ( "kind", models.CharField( choices=[ ("image", "Image"), ("video", "Video"), ("audio", "Audio"), ("document", "Document"), ("dataset", "Dataset"), ("widget_bundle", "Widget bundle"), ("other", "Other"), ], default="image", max_length=20, ), ), ("storage_key", models.CharField(max_length=512, unique=True)), ("original_filename", models.CharField(max_length=255)), ("mime_type", models.CharField(max_length=127)), ("size_bytes", models.PositiveBigIntegerField()), ("sha256", models.CharField(max_length=64)), ( "alt_text", models.CharField( blank=True, help_text="Accessibility description; required by the API for images.", max_length=500, ), ), ("width", models.PositiveIntegerField(blank=True, null=True)), ("height", models.PositiveIntegerField(blank=True, null=True)), ("duration_seconds", models.FloatField(blank=True, null=True)), ("license", models.CharField(default="CC-BY-SA-4.0", max_length=64)), ( "attribution", models.TextField( blank=True, help_text="Required when the uploader is not the author.", ), ), ( "scan_status", models.CharField( choices=[ ("pending", "Pending scan"), ("clean", "Clean"), ("flagged", "Flagged"), ], default="pending", max_length=10, ), ), ( "uploaded_by", models.ForeignKey( null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="media_assets", to=settings.AUTH_USER_MODEL, ), ), ], options={ "ordering": ["-created_at"], }, ), migrations.CreateModel( name="AuditLog", fields=[ ( "id", models.UUIDField( default=uuid.uuid4, editable=False, primary_key=True, serialize=False, ), ), ( "action", models.CharField( db_index=True, help_text="Dotted action name, e.g. 'problem.publish' or 'user.role_grant'.", max_length=100, ), ), ("target_object_id", models.CharField(blank=True, max_length=64)), ("summary", models.CharField(blank=True, max_length=500)), ("metadata", models.JSONField(blank=True, default=dict)), ("ip_address", models.GenericIPAddressField(blank=True, null=True)), ("user_agent", models.CharField(blank=True, max_length=500)), ("created_at", models.DateTimeField(auto_now_add=True, db_index=True)), ( "actor", models.ForeignKey( null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="audit_logs", to=settings.AUTH_USER_MODEL, ), ), ( "target_content_type", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="contenttypes.contenttype", ), ), ], options={ "ordering": ["-created_at"], }, ), migrations.AddIndex( model_name="mediaasset", index=models.Index(fields=["sha256"], name="media_sha256_idx"), ), migrations.AddIndex( model_name="mediaasset", index=models.Index( fields=["kind", "created_at"], name="media_kind_created_idx" ), ), migrations.AddIndex( model_name="auditlog", index=models.Index( fields=["target_content_type", "target_object_id"], name="audit_target_idx", ), ), ]