66 lines
2.8 KiB
Python
66 lines
2.8 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import List, Optional, Dict, Any
|
|
|
|
class ServiceStatus(BaseModel):
|
|
enabled: bool = Field(..., description="Whether the service is enabled")
|
|
url: str = Field(..., description="Service URL")
|
|
status: str = Field(..., description="Service status")
|
|
|
|
class HAAttributes(BaseModel):
|
|
unit_of_measurement: Optional[str] = Field(None, description="Unit of measurement")
|
|
friendly_name: Optional[str] = Field(None, description="Friendly name")
|
|
|
|
class HAEntity(BaseModel):
|
|
entity_id: str = Field(..., description="Entity ID")
|
|
state: str = Field(..., description="Current state")
|
|
attributes: HAAttributes = Field(..., description="Entity attributes")
|
|
|
|
class HAEntitiesResponse(BaseModel):
|
|
entities: List[HAEntity] = Field(..., description="List of Home Assistant entities")
|
|
|
|
class FrigateEvent(BaseModel):
|
|
id: str = Field(..., description="Event ID")
|
|
timestamp: str = Field(..., description="Event timestamp")
|
|
camera: str = Field(..., description="Camera name")
|
|
label: str = Field(..., description="Detection label")
|
|
confidence: float = Field(..., ge=0, le=1, description="Detection confidence")
|
|
|
|
class FrigateEventsResponse(BaseModel):
|
|
events: List[FrigateEvent] = Field(..., description="List of Frigate events")
|
|
|
|
class ImmichAsset(BaseModel):
|
|
id: str = Field(..., description="Asset ID")
|
|
filename: str = Field(..., description="Filename")
|
|
created_at: str = Field(..., description="Creation timestamp")
|
|
tags: List[str] = Field(..., description="Asset tags")
|
|
faces: List[str] = Field(..., description="Detected faces")
|
|
|
|
class ImmichAssetsResponse(BaseModel):
|
|
assets: List[ImmichAsset] = Field(..., description="List of Immich assets")
|
|
|
|
class EventData(BaseModel):
|
|
service: str = Field(..., description="Service name")
|
|
event_type: str = Field(..., description="Event type")
|
|
metadata: Dict[str, Any] = Field(default_factory=dict, description="Event metadata")
|
|
|
|
class EventResponse(BaseModel):
|
|
status: str = Field(..., description="Publication status")
|
|
event: Dict[str, Any] = Field(..., description="Published event")
|
|
|
|
class Event(BaseModel):
|
|
timestamp: str = Field(..., description="Event timestamp")
|
|
service: str = Field(..., description="Service name")
|
|
event_type: str = Field(..., description="Event type")
|
|
metadata: str = Field(..., description="Event metadata as JSON string")
|
|
|
|
class EventsResponse(BaseModel):
|
|
events: List[Event] = Field(..., description="List of events")
|
|
|
|
class HealthResponse(BaseModel):
|
|
status: str = Field(..., description="Service health status")
|
|
timestamp: str = Field(..., description="Health check timestamp")
|
|
|
|
class RootResponse(BaseModel):
|
|
message: str = Field(..., description="API message")
|
|
version: str = Field(..., description="API version")
|