from sqlalchemy import JSON, Column, DateTime, Integer, String, Text from sqlalchemy.sql import func from app.db.session import Base class SystemLog(Base): __tablename__ = "system_logs" id = Column(Integer, primary_key=True, autoincrement=True) occurred_at = Column(DateTime(timezone=True), server_default=func.now(), index=True) source = Column(String(50), nullable=False, index=True) service = Column(String(50), nullable=True) module = Column(String(120), nullable=True) event = Column(String(160), nullable=True, index=True) level = Column(String(20), nullable=False, index=True) message = Column(Text, nullable=False) request_id = Column(String(64), nullable=True, index=True) trace_id = Column(String(64), nullable=True) user_id = Column(Integer, nullable=True, index=True) category = Column(String(80), nullable=True, index=True) context = Column(JSON, nullable=False, default=dict) created_at = Column(DateTime(timezone=True), server_default=func.now()) class AuditLog(Base): __tablename__ = "audit_logs" id = Column(Integer, primary_key=True, autoincrement=True) occurred_at = Column(DateTime(timezone=True), server_default=func.now(), index=True) actor_id = Column(Integer, nullable=True, index=True) actor_name = Column(String(255), nullable=True) action = Column(String(120), nullable=False, index=True) target_type = Column(String(80), nullable=True) target_id = Column(String(120), nullable=True) result = Column(String(40), nullable=True, index=True) request_id = Column(String(64), nullable=True, index=True) ip = Column(String(64), nullable=True) details = Column(JSON, nullable=False, default=dict) created_at = Column(DateTime(timezone=True), server_default=func.now())