from pydantic import BaseModel from typing import Optional from uuid import UUID from typing import Optional, Union from typing import List class BuildingItem(BaseModel): id: UUID name: str city: Optional[str] = None address: Optional[str] = None latitude: Optional[float] = None longitude: Optional[float] = None class FloorItem(BaseModel): id: UUID name: str image: Optional[str] = None description: Optional[str] = None scale: Optional[float] = None building: Optional[UUID] = None class ZoneItem(BaseModel): id: UUID name: str groups: List[UUID] floor: Optional[UUID] = None building: Optional[UUID] = None class GatewayItem(BaseModel): id: UUID 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 floor: Optional[UUID] = None building: Optional[UUID] = 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 floor: Optional[UUID] = None building: Optional[UUID] = None battery: Optional[str] = None temperature: Optional[str] = None acceleration: Optional[str] = None heartRate: Optional[str] = None buttonPress: Optional[bool] = None class OperatorItem(BaseModel): id: UUID name: str phone: Optional[str] = None zones: List[UUID] groups: Optional[str] = None notes: Optional[str] = None building: Optional[UUID] = None class SubjectItem(BaseModel): id: UUID name: str role: Optional[str] = None phone: Optional[str] = None tracker: UUID groups: Optional[str] = None notes: Optional[str] = None building: Optional[UUID] = None class AlarmItem(BaseModel): id: UUID 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: UUID 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[UUID] = None subjectName: Optional[str] = None floor: Optional[UUID] = None signal: Optional[float] = None building: Optional[UUID] = None class TrackerZoneItem(BaseModel): id: UUID zoneList: List[UUID] tracker: UUID days: Optional[str] = None time: Optional[str] = None class ConfigItem(BaseModel): name: str min: str max: str pattern: str configs:List[str] propery: List[str] offset: str