from sqlalchemy import select from sqlalchemy.orm import Session from app.db.models import GatewayRequestAudit class GatewayRequestAuditRepository: def __init__(self, db: Session) -> None: self.db = db def create( self, *, tenant_id: str, request_id: str, method: str, path: str, query_string: str | None, target_service: str | None, target_url: str | None, status_code: int | None, duration_ms: int, client_host: str | None, user_agent: str | None, error_message: str | None, ) -> GatewayRequestAudit: entity = GatewayRequestAudit( tenant_id=tenant_id, request_id=request_id, method=method, path=path, query_string=query_string, target_service=target_service, target_url=target_url, status_code=status_code, duration_ms=duration_ms, client_host=client_host, user_agent=user_agent, error_message=error_message, ) self.db.add(entity) self.db.commit() self.db.refresh(entity) return entity def list_by_scope( self, *, tenant_id: str, request_id: str | None = None, target_service: str | None = None, limit: int = 100, ) -> list[GatewayRequestAudit]: stmt = select(GatewayRequestAudit).where(GatewayRequestAudit.tenant_id == tenant_id) if request_id is not None: stmt = stmt.where(GatewayRequestAudit.request_id == request_id) if target_service is not None: stmt = stmt.where(GatewayRequestAudit.target_service == target_service) stmt = stmt.order_by(GatewayRequestAudit.created_time.desc()).limit(limit) return list(self.db.scalars(stmt))