from django.db import models from apps.core.models import UUIDModel class AuditEvent(UUIDModel): """Immutable audit log entry. Records are never updated or deleted.""" actor = models.ForeignKey("accounts.User", null=True, blank=True, on_delete=models.SET_NULL) action = models.CharField(max_length=120, db_index=True) object_type = models.CharField(max_length=120, db_index=True) object_id = models.CharField(max_length=120, blank=True, db_index=True) ip = models.GenericIPAddressField(null=True, blank=True) before = models.JSONField(default=dict, blank=True) after = models.JSONField(default=dict, blank=True) metadata = models.JSONField(default=dict, blank=True) created_at = models.DateTimeField(auto_now_add=True, db_index=True) class Meta: ordering = ["-created_at"] def __str__(self) -> str: return f"{self.action} {self.object_type}:{self.object_id}"