Files
sac4cps-backend/microservices/api-gateway/models.py
rafaeldpsilva a7a18e6295 first commit
2025-09-09 13:46:42 +01:00

77 lines
1.9 KiB
Python

"""
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