""" Models for API Gateway """ from pydantic import BaseModel, Field from typing import Dict, Any, Optional, List from datetime import datetime class ServiceConfig(BaseModel): """Configuration for a microservice""" name: str base_url: str health_endpoint: str = "/health" auth_required: bool = True timeout_seconds: int = 30 retry_attempts: int = 3 class ServiceHealth(BaseModel): """Health status of a service""" service: str status: str # healthy, unhealthy, unknown response_time_ms: Optional[float] = None last_check: datetime error_message: Optional[str] = None class HealthResponse(BaseModel): """Gateway health response""" service: str status: str timestamp: datetime version: str services: Optional[Dict[str, Any]] = None healthy_services: Optional[int] = None total_services: Optional[int] = None class Config: json_encoders = { datetime: lambda v: v.isoformat() } class GatewayStats(BaseModel): """API Gateway statistics""" total_requests: int successful_requests: int failed_requests: int success_rate: float uptime_seconds: float service_requests: Dict[str, int] timestamp: datetime class Config: json_encoders = { datetime: lambda v: v.isoformat() } class AuthToken(BaseModel): """Authentication token model""" token: str user_id: Optional[str] = None permissions: List[str] = Field(default_factory=list) class ProxyRequest(BaseModel): """Proxy request model""" service: str path: str method: str headers: Dict[str, str] query_params: Dict[str, Any] body: Optional[bytes] = None class ProxyResponse(BaseModel): """Proxy response model""" status_code: int headers: Dict[str, str] body: bytes service: str response_time_ms: float