from pydantic import BaseModel, Field from typing import Optional from uuid import UUID from typing import Optional, Union, Literal from typing import List from typing import Tuple from typing import Dict 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 floornumber: int image: Optional[str] = None description: Optional[str] = None scale: Optional[float] = None building: Optional[UUID] = None class ZoneItem(BaseModel): id: UUID name: str groups: Optional[List[UUID]] = None floor: Optional[UUID] = None building: Optional[UUID] = None class ZoneAreaPointItem(BaseModel): x: float y: float class ZoneAreaDefinitionItem(BaseModel): UUID: UUID ZoneUUID: UUID points: List[ZoneAreaPointItem] 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 zone: 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 SettingItem(BaseModel): id: str name: str role: str unit: int update: Optional[int] = None debug: bool debugFields: Optional[List[str]] = None language: str class CoreSettingsItem(BaseModel): ID: int current_algorithm: str location_confidence: int last_seen_threshold: int beacon_metric_size: int HA_send_interval: int HA_send_changes_only: bool RSSI_enforce_threshold: bool RSSI_min_threshold: int class CoreSettingsUpdateItem(BaseModel): current_algorithm: str last_seen_threshold: int beacon_metric_size: int HA_send_interval: int HA_send_changes_only: bool RSSI_enforce_threshold: bool RSSI_min_threshold: int location_confidence: Optional[int] = None class GuiConfigItem(BaseModel): id: str name: Optional[str] = None role: Optional[Literal["developer", "administrator", "user"]] = None debug: Optional[bool] = None class TablePreferenceItem(BaseModel): hiddenColumns: Dict[str, bool] = Field(default_factory=dict) class UserPreferencesItem(BaseModel): id: Optional[UUID] = None uid: str language: Literal["it", "en"] = "it" tables: Dict[str, TablePreferenceItem] = Field(default_factory=dict) updated_at: Optional[str] = None class UserPreferencesUpdateItem(BaseModel): language: Optional[Literal["it", "en"]] = None tables: Optional[Dict[str, TablePreferenceItem]] = 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 AlarmCoreItem(BaseModel): id: UUID tracker_id: UUID type: str status: str timestamp: str operator: Optional[UUID] = None operatorName: Optional[str] = None assignment_timestamp: Optional[str] = None resolution_timestamp: Optional[str] = None class AlarmStatusUpdateItem(BaseModel): id: UUID tracker_id: Optional[UUID] = None type: Optional[str] = None status: Optional[str] = None timestamp: Optional[str] = None operator: Optional[Union[UUID, str]] = None operatorName: Optional[str] = None assignment_timestamp: Optional[str] = None resolution_timestamp: Optional[str] = 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 x: Optional[float] = None y: Optional[float] = None z: Optional[float] = None class TrackHistoryItem(BaseModel): ID: Optional[int] = None 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 x: Optional[float] = None y: Optional[float] = None z: Optional[float] = None class TrackerZoneItem(BaseModel): id: UUID name: Optional[str] = None 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 class CoreSettingsItem(BaseModel): ID: int current_algorithm: str location_confidence: int last_seen_threshold: int beacon_metric_size: int HA_send_interval: int HA_send_changes_only: bool RSSI_enforce_threshold: bool RSSI_min_threshold: int class CoreSettingsUpdateItem(BaseModel): current_algorithm: str last_seen_threshold: int beacon_metric_size: int HA_send_interval: int HA_send_changes_only: bool RSSI_enforce_threshold: bool RSSI_min_threshold: int location_confidence: Optional[int] = None class CalibrationMetadata(BaseModel): pixel_ratio: float calibrated: bool origin: Tuple[int, int] grid_size: int class FloorMapUploadResponseItem(BaseModel): floor: int name: str path: str mime_type: str metadata: CalibrationMetadata #??? Da verificate ??? class DownloadFileImmage(): name : str immage_path : str