""" Error log model for storing API errors """ from sqlalchemy import Column, Integer, String, Text, DateTime, JSON, Float, Boolean from sqlalchemy.sql import func from app.core.database import Base class ErrorLog(Base): """Model for storing API error logs""" __tablename__ = "error_logs" id = Column(Integer, primary_key=True, index=True) # Request information request_id = Column(String(50), index=True) endpoint = Column(String(200), index=True) method = Column(String(10)) path = Column(String(500)) query_params = Column(JSON, nullable=True) request_body = Column(JSON, nullable=True) headers = Column(JSON, nullable=True) # Error information error_type = Column(String(100), index=True) error_message = Column(Text) error_detail = Column(JSON, nullable=True) status_code = Column(Integer, index=True) stack_trace = Column(Text, nullable=True) # Context information user_agent = Column(String(500), nullable=True) client_ip = Column(String(50), nullable=True) session_id = Column(String(100), nullable=True) user_id = Column(String(100), nullable=True) # Performance metrics response_time_ms = Column(Float, nullable=True) # Resolution is_resolved = Column(Boolean, default=False, index=True) resolved_at = Column(DateTime(timezone=True), nullable=True) resolution_notes = Column(Text, nullable=True) # Timestamps created_at = Column(DateTime(timezone=True), server_default=func.now(), index=True) def to_dict(self): """Convert to dictionary for API responses""" return { "id": self.id, "request_id": self.request_id, "endpoint": self.endpoint, "method": self.method, "path": self.path, "query_params": self.query_params, "request_body": self.request_body, "error_type": self.error_type, "error_message": self.error_message, "error_detail": self.error_detail, "status_code": self.status_code, "stack_trace": self.stack_trace, "user_agent": self.user_agent, "client_ip": self.client_ip, "response_time_ms": self.response_time_ms, "is_resolved": self.is_resolved, "resolved_at": self.resolved_at.isoformat() if self.resolved_at else None, "resolution_notes": self.resolution_notes, "created_at": self.created_at.isoformat() if self.created_at else None }