from __future__ import annotations from datetime import datetime from pydantic import BaseModel, Field from app.schemas.common import ORMModel class DataSourceRead(ORMModel): id: str mine_id: str | None code: str name: str source_type: str protocol: str endpoint: str status: str last_sync_at: datetime | None point_count: int latency_ms: int | None config: dict class SensorRead(ORMModel): id: str mine_id: str area_id: str | None data_source_id: str | None code: str name: str sensor_type: str unit: str location: str status: str warning_threshold: float | None alarm_threshold: float | None upper_bound: float | None lower_bound: float | None last_value: float | None last_seen_at: datetime | None properties: dict class SensorReadingCreate(BaseModel): sensor_id: str measured_at: datetime value: float quality: int = 100 is_alarm: bool = False source: str = "" meta: dict = Field(default_factory=dict) class SensorReadingRead(ORMModel): id: str sensor_id: str measured_at: datetime value: float quality: int is_alarm: bool source: str meta: dict class VentilationFacilityRead(ORMModel): id: str mine_id: str area_id: str | None roadway_id: str | None code: str name: str facility_type: str location: str status: str open_state: str sensor_value: float | None video_confidence: float | None last_checked_at: datetime | None properties: dict class AlarmRead(ORMModel): id: str mine_id: str sensor_id: str | None alarm_no: str alarm_type: str level: str title: str content: str value: float | None threshold: float | None status: str occurred_at: datetime acknowledged_at: datetime | None closed_at: datetime | None metadata: dict = Field(validation_alias="metadata_json") class MonitoringOverview(BaseModel): data_source_count: int online_source_count: int sensor_count: int online_sensor_count: int facility_count: int abnormal_facility_count: int open_alarm_count: int high_alarm_count: int