from pydantic import BaseModel, ConfigDict, Field from typing import Optional, Dict, Any from datetime import datetime from uuid import UUID class MapItemBase(BaseModel): """Base map item schema with common attributes.""" type: str = Field(..., description="Item type: cable, wireless_mesh, switch, indoor_ap, outdoor_ap, other_device, info") geometry: Dict[str, Any] = Field(..., description="GeoJSON geometry (Point or LineString)") properties: Dict[str, Any] = Field(default_factory=dict, description="Item-specific properties") class MapItemCreate(MapItemBase): """Schema for creating a new map item.""" pass class MapItemUpdate(BaseModel): """Schema for updating map item information.""" type: Optional[str] = None geometry: Optional[Dict[str, Any]] = None properties: Optional[Dict[str, Any]] = None class MapItemResponse(MapItemBase): """Response schema for map item data.""" id: UUID map_id: UUID created_at: datetime updated_at: datetime created_by: Optional[UUID] = None updated_by: Optional[UUID] = None model_config = ConfigDict(from_attributes=True)