Files
boc/landvex-admin/backend/app/models/audit.py
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

39 lines
1.4 KiB
Python

"""Audit log model for compliance and security tracking."""
from datetime import datetime
from enum import Enum
from uuid import UUID, uuid4
from sqlalchemy import String, ForeignKey, JSON, INET, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from app.database import Base
class AuditSeverity(str, Enum):
INFO = "info"
WARNING = "warning"
CRITICAL = "critical"
class AuditLog(Base):
__tablename__ = "audit_logs"
id: Mapped[UUID] = mapped_column(primary_key=True, default=uuid4)
tenant_id: Mapped[UUID | None] = mapped_column(ForeignKey("tenants.id"))
user_id: Mapped[UUID | None] = mapped_column(ForeignKey("users.id"))
action: Mapped[str] = mapped_column(String(50), nullable=False)
resource_type: Mapped[str] = mapped_column(String(50), nullable=False)
resource_id: Mapped[UUID | None]
details: Mapped[dict] = mapped_column(JSON, default=dict)
ip_address: Mapped[str | None] = mapped_column(INET)
user_agent: Mapped[str | None] = mapped_column(Text)
severity: Mapped[AuditSeverity] = mapped_column(default=AuditSeverity.INFO)
created_at: Mapped[datetime] = mapped_column(default=datetime.utcnow)
# Relationships
tenant: Mapped["Tenant | None"] = relationship(back_populates="audit_logs")
user: Mapped["User | None"] = relationship(back_populates="audit_logs")
def __repr__(self) -> str:
return f"<AuditLog {self.action} on {self.resource_type}>"