56 lines
1.5 KiB
Python
Executable File
56 lines
1.5 KiB
Python
Executable File
from pydantic import BaseModel, ConfigDict
|
|
from typing import Optional, List
|
|
from datetime import date, datetime
|
|
from app.models.expense import ExpenseCategory
|
|
|
|
# --- Vehicle Schemas ---
|
|
class VehicleBase(BaseModel):
|
|
license_plate: str
|
|
make: str
|
|
model: str
|
|
year: int
|
|
fuel_type: Optional[str] = None
|
|
vin: Optional[str] = None
|
|
initial_odometer: int = 0
|
|
mot_expiry_date: Optional[date] = None
|
|
insurance_expiry_date: Optional[date] = None
|
|
|
|
class VehicleCreate(VehicleBase):
|
|
pass
|
|
|
|
class VehicleResponse(VehicleBase):
|
|
id: int
|
|
current_odometer: int
|
|
created_at: datetime
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
# --- Event / Expense Schemas ---
|
|
class EventBase(BaseModel):
|
|
event_type: ExpenseCategory
|
|
date: date
|
|
odometer_value: int
|
|
cost_amount: int
|
|
description: Optional[str] = None
|
|
is_diy: bool = False
|
|
|
|
# Ad-Hoc Provider mező: Ha stringet kapunk, a service megkeresi vagy létrehozza
|
|
provider_name: Optional[str] = None
|
|
provider_id: Optional[int] = None # Ha már ismert ID-t küldünk
|
|
|
|
class EventCreate(EventBase):
|
|
pass
|
|
|
|
class EventResponse(EventBase):
|
|
id: int
|
|
vehicle_id: int
|
|
odometer_anomaly: bool
|
|
service_provider_id: Optional[int]
|
|
image_paths: Optional[List[str]] = []
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
class TCOStats(BaseModel):
|
|
vehicle_id: int
|
|
total_cost: int
|
|
breakdown: dict[str, int] # Kategóriánkénti bontás
|
|
cost_per_km: Optional[float] = 0.0 |