64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import (
|
|
BigInteger,
|
|
DateTime,
|
|
ForeignKey,
|
|
Index,
|
|
JSON,
|
|
String,
|
|
func,
|
|
text,
|
|
)
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from src.db.base import Base
|
|
|
|
|
|
class AuditLog(Base):
|
|
__tablename__ = "audit_log"
|
|
__table_args__ = (
|
|
Index("ix_v3_audit_log_dt", text("event_dt DESC")),
|
|
Index("ix_v3_audit_log_event", "event"),
|
|
Index(
|
|
"ix_v3_audit_log_form",
|
|
"form_id",
|
|
postgresql_where="form_id IS NOT NULL",
|
|
),
|
|
Index("ix_v3_audit_log_user", "user_id"),
|
|
Index("ix_v4_audit_log_dt", text("event_dt DESC")),
|
|
Index("ix_v4_audit_log_event", "event"),
|
|
Index(
|
|
"ix_v4_audit_log_form",
|
|
"form_id",
|
|
postgresql_where="form_id IS NOT NULL",
|
|
),
|
|
Index("ix_v4_audit_log_user", "user_id"),
|
|
{"schema": "v3"},
|
|
)
|
|
|
|
id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
|
|
user_id: Mapped[int | None] = mapped_column(
|
|
ForeignKey("v3.app_user.id", ondelete="SET NULL")
|
|
)
|
|
org_unit_id: Mapped[int | None] = mapped_column(
|
|
ForeignKey("v3.org_unit.id", ondelete="SET NULL")
|
|
)
|
|
task_id: Mapped[int | None] = mapped_column()
|
|
form_id: Mapped[int | None] = mapped_column()
|
|
event_dt: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True), server_default=func.now()
|
|
)
|
|
event: Mapped[str] = mapped_column(String)
|
|
event_type: Mapped[str] = mapped_column(String)
|
|
event_data: Mapped[dict | None] = mapped_column(JSON)
|
|
|
|
# user: Mapped["AppUser | None"] = relationship(
|
|
# "AppUser", back_populates="audit_logs"
|
|
# )
|
|
# org_unit: Mapped["OrgUnit | None"] = relationship(
|
|
# "OrgUnit", back_populates="audit_logs"
|
|
# )
|