from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Text, Index
from sqlalchemy.orm import relationship
from app.db.base import Base
class AuditLog(Base):
__tablename__ = "audit_log"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("user.id"), nullable=True)
action = Column(String(50), nullable=False)
resource_type = Column(String(50), nullable=False)
resource_id = Column(Integer, nullable=True)
details = Column(Text, nullable=True)
ip_address = Column(String(45), nullable=True) # IPv6 compatible
user_agent = Column(String(255), nullable=True)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
# Relationships
user = relationship("User", back_populates="audit_logs")
# Indexes
__table_args__ = (
Index("ix_audit_log_user_id", "user_id"),
Index("ix_audit_log_action", "action"),
Index("ix_audit_log_resource", "resource_type", "resource_id"),
Index("ix_audit_log_created_at", "created_at"),
)