"""Pydantic schemas for Vehicles and VehicleAssignments.""" from pydantic import BaseModel, Field class VehicleAssignmentResponse(BaseModel): """Public vehicle assignment representation.""" id: str vehicle_id: str project_id: str | None = None start_date: str end_date: str status: str notes: str | None = None created_at: str updated_at: str model_config = {"from_attributes": True} class VehicleCreateRequest(BaseModel): """Request body for creating a new vehicle.""" name: str = Field(..., max_length=255) license_plate: str | None = Field(None, max_length=50) brand: str | None = Field(None, max_length=100) model: str | None = Field(None, max_length=100) year: int | None = None color: str | None = Field(None, max_length=50) vehicle_type: str | None = Field(None, max_length=50) payload_capacity_kg: float | None = None load_volume_m3: float | None = None fuel_type: str | None = Field(None, max_length=30) is_active: bool = True notes: str | None = None class VehicleUpdateRequest(BaseModel): """Request body for updating a vehicle.""" name: str | None = Field(None, max_length=255) license_plate: str | None = Field(None, max_length=50) brand: str | None = Field(None, max_length=100) model: str | None = Field(None, max_length=100) year: int | None = None color: str | None = Field(None, max_length=50) vehicle_type: str | None = Field(None, max_length=50) payload_capacity_kg: float | None = None load_volume_m3: float | None = None fuel_type: str | None = Field(None, max_length=30) is_active: bool | None = None notes: str | None = None class VehicleResponse(BaseModel): """Public vehicle representation.""" id: str account_id: str name: str license_plate: str | None = None brand: str | None = None model: str | None = None year: int | None = None color: str | None = None vehicle_type: str | None = None payload_capacity_kg: float | None = None load_volume_m3: float | None = None fuel_type: str | None = None is_active: bool notes: str | None = None assignments: list[VehicleAssignmentResponse] = [] created_at: str updated_at: str model_config = {"from_attributes": True} class VehicleListResponse(BaseModel): """Paginated list of vehicles.""" items: list[VehicleResponse] total: int page: int size: int class VehicleAssignmentCreateRequest(BaseModel): """Request body for creating a vehicle assignment.""" vehicle_id: str project_id: str | None = None start_date: str = Field(..., description="ISO datetime") end_date: str = Field(..., description="ISO datetime") status: str = Field("assigned", max_length=20) notes: str | None = None class VehicleAssignmentUpdateRequest(BaseModel): """Request body for updating a vehicle assignment.""" start_date: str | None = None end_date: str | None = None status: str | None = Field(None, max_length=20) notes: str | None = None class VehicleAssignmentListResponse(BaseModel): """Paginated list of vehicle assignments.""" items: list[VehicleAssignmentResponse] total: int page: int size: int