""" Request log model for storing all API requests """ from sqlalchemy import Column, Integer, String, Text, DateTime, JSON, Float, Boolean from sqlalchemy.sql import func from app.core.database import Base class RequestLog(Base): """Model for storing API request logs""" __tablename__ = "request_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(Text) query_params = Column(JSON, nullable=True) request_body = Column(JSON, nullable=True) headers = Column(JSON, nullable=True) # Response information status_code = Column(Integer, index=True) response_size = Column(Integer, 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) # 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, "headers": self.headers, "status_code": self.status_code, "response_size": self.response_size, "user_agent": self.user_agent, "client_ip": self.client_ip, "response_time_ms": self.response_time_ms, "created_at": self.created_at.isoformat() if self.created_at else None }