from pydantic import BaseModel from typing import Optional from uuid import UUID from typing import Optional, Union class BuildingItem(BaseModel): id: UUID name: str city: Optional[str] = None address: Optional[str] = None latitude: Optional[float] = None longitude: Optional[float] = None class PlanItem(BaseModel): id: UUID name: str image: Optional[str] = None scale: Optional[float] = None building: Optional[UUID] = None class ZoneItem(BaseModel): id: UUID name: str groups: Optional[str] = None plan: Optional[UUID] = None building: Optional[UUID] = None class GatewayItem(BaseModel): id: str name: str mac: Optional[str] = None status: Optional[Union[str, bool]] = None model: Optional[str] = None ip: Optional[str] = None position: Optional[str] = None x: Optional[float] = None y: Optional[float] = None notes: Optional[str] = None zone: Optional[str] = None building: Optional[str] = None class TrackerItem(BaseModel): id: UUID name: str mac: Optional[str] = None status: Optional[str] = None model: Optional[str] = None position: Optional[str] = None notes: Optional[str] = None x: Optional[float] = None y: Optional[float] = None zone: Optional[UUID] = None building: Optional[UUID] = None class OperatorItem(BaseModel): id: str name: str phone: Optional[str] = None zones: Optional[str] = None groups: Optional[str] = None notes: Optional[str] = None building: Optional[UUID] = None class SubjectItem(BaseModel): id: str name: str role: Optional[str] = None phone: Optional[str] = None zones: Optional[str] = None groups: Optional[str] = None notes: Optional[str] = None building: Optional[UUID] = None class AlarmItem(BaseModel): id: str timestamp: Optional[str] = None type: Optional[str] = None status: Optional[str] = None gateway: Optional[UUID] = None gatewayMac: Optional[str] = None tracker: Optional[UUID] = None trackerBid: Optional[str] = None subject: Optional[UUID] = None subjectName: Optional[str] = None operator: Optional[UUID] = None operatorName: Optional[str] = None zone: Optional[UUID] = None zoneName: Optional[str] = None building: Optional[UUID] = None class TrackItem(BaseModel): id: str timestamp: Optional[str] = None type: Optional[str] = None status: Optional[str] = None gateway: Optional[UUID] = None gatewayMac: Optional[str] = None tracker: Optional[UUID] = None trackerMac: Optional[str] = None subject: Optional[str] = None subjectName: Optional[str] = None zone: Optional[str] = None zoneName: Optional[str] = None signal: Optional[float] = None building: Optional[UUID] = None