from datetime import datetime from pydantic import BaseModel, Field class DeviceLocationReportRequest(BaseModel): coord_type: str = Field(default="gcj02", min_length=1, max_length=16) lat: float = Field(ge=-90, le=90) lng: float = Field(ge=-180, le=180) accuracy_m: int | None = Field(default=None, ge=0) altitude_m: float | None = None speed_mps: float | None = None heading_deg: int | None = Field(default=None, ge=0, le=360) source: int = Field(ge=0) battery_pct: int | None = Field(default=None, ge=0, le=100) device_time: datetime class DeviceLocationPoint(BaseModel): child_id: int child_name: str | None = None device_id: str coord_type: str lat: float lng: float accuracy_m: int | None = None altitude_m: float | None = None speed_mps: float | None = None heading_deg: int | None = None source: int battery_pct: int | None = None device_time: datetime server_time: datetime class DeviceLocationCurrentResponse(DeviceLocationPoint): updated_at: datetime class DeviceLocationReportResponse(DeviceLocationCurrentResponse): pass class DeviceLocationTrajectoryItem(DeviceLocationPoint): id: int created_at: datetime class DeviceLocationTrajectoryResponse(BaseModel): items: list[DeviceLocationTrajectoryItem] total: int start_at: datetime | None = None end_at: datetime | None = None