import uuid from sqlalchemy import Column, String, DateTime, ForeignKey, Index, func from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.orm import relationship from app.database import Base class AuditLog(Base): """ Audit log model for tracking all system actions. Records user actions, entity changes, and system events for security auditing and compliance purposes. """ __tablename__ = "audit_logs" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) user_id = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True) action = Column(String, nullable=False) entity_type = Column(String, nullable=True) entity_id = Column(String, nullable=True) timestamp = Column(DateTime(timezone=True), server_default=func.now()) details = Column(JSONB, nullable=True) # Relationships user = relationship("User") __table_args__ = ( Index("ix_audit_logs_entity", "entity_type", "entity_id"), Index("ix_audit_logs_timestamp", "timestamp"), Index("ix_audit_logs_entity_type_entity_id_action", "entity_type", "entity_id", "action"), )