24 lines
929 B
Python
24 lines
929 B
Python
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}"
|