23 lines
1,008 B
Python
23 lines
1,008 B
Python
"""Audit-Ereignisse (→ Konzept 13)."""
|
|
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from sqlalchemy import JSON, BigInteger, ForeignKey, Identity, String
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.core.database import Base, now
|
|
|
|
|
|
class AuditEvent(Base):
|
|
__tablename__ = "audit_events"
|
|
|
|
id: Mapped[int] = mapped_column(BigInteger, Identity(), primary_key=True)
|
|
time: Mapped[datetime] = mapped_column(default=now, index=True)
|
|
user_id: Mapped[int | None] = mapped_column(ForeignKey("users.id"))
|
|
workspace_id: Mapped[int | None] = mapped_column(ForeignKey("workspaces.id", ondelete="SET NULL"), index=True)
|
|
action: Mapped[str] = mapped_column(String(100)) # z. B. source.tested
|
|
target_kind: Mapped[str] = mapped_column(String(50), default="")
|
|
target_id: Mapped[str] = mapped_column(String(100), default="")
|
|
# Keine Geheimnisse und keine vollständigen Inhalte (→ Konzept 6.2)
|
|
data: Mapped[dict[str, Any]] = mapped_column(JSON, default=dict)
|