from pydantic import BaseModel, ConfigDict, Field from typing import Optional, Dict, Any, List from uuid import UUID from datetime import datetime # --- KATALÓGUS SÉMÁK (Gyári adatok) --- class AssetCatalogBase(BaseModel): """Alap katalógus adatok, amik a technikai dúsításból származnak.""" make: str model: str generation: Optional[str] = None year_from: Optional[int] = None year_to: Optional[int] = None vehicle_class: Optional[str] = None fuel_type: Optional[str] = None engine_code: Optional[str] = None # --- ÚJ TECHNIKAI MEZŐK (Robot v1.0.8 Smart Hunter adatai) --- power_kw: Optional[int] = None engine_capacity: Optional[int] = None max_weight_kg: Optional[int] = None axle_count: Optional[int] = None body_type: Optional[str] = None class AssetCatalogResponse(AssetCatalogBase): """Katalógus válasz séma azonosítóval és extra gyári adatokkal.""" id: int factory_data: Optional[Dict[str, Any]] = None # Pydantic v2 konfiguráció az ORM (SQLAlchemy) támogatáshoz model_config = ConfigDict(from_attributes=True) # --- JÁRMŰ SÉMÁK (Asset) --- class AssetBase(BaseModel): """Jármű példány alapadatai (egyedi azonosítók).""" vin: str = Field(..., min_length=17, max_length=17) license_plate: str name: Optional[str] = None year_of_manufacture: Optional[int] = None class AssetCreate(AssetBase): """Séma új jármű felvételéhez.""" make: str model: str vehicle_class: Optional[str] = "car" fuel_type: Optional[str] = None current_reading: Optional[int] = 0 class AssetResponse(AssetBase): """ Teljes jármű válasz séma. Ez a séma tartalmazza a 'catalog' objektumot, amiben a dúsított műszaki adatok vannak. """ id: UUID catalog_id: int catalog: AssetCatalogResponse # Ez a pont kapcsolja össze a dúsított technikai adatokat status: str is_verified: bool model_config = ConfigDict(from_attributes=True) # --- DIGITÁLIS IKER (Full Profile) --- class AssetFullProfile(BaseModel): """ Komplex jelentésekhez használt séma. Összefogja az identitást, telemetriát, pénzügyeket és szerviztörténetet. """ identity: Dict[str, Any] telemetry: Dict[str, Any] financial_summary: Dict[str, Any] service_history: List[Dict[str, Any]] model_config = ConfigDict(from_attributes=True)