frontend kínlódás
This commit is contained in:
78
backend/app/schemas/asset_event.py
Normal file
78
backend/app/schemas/asset_event.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# /opt/docker/dev/service_finder/backend/app/schemas/asset_event.py
|
||||
from pydantic import BaseModel, ConfigDict, Field, validator
|
||||
from typing import Optional, Dict, Any, List
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
from enum import Enum
|
||||
|
||||
class AssetEventTypeEnum(str, Enum):
|
||||
"""Digitális Szervizkönyv eseménytípusok."""
|
||||
SERVICE = "SERVICE" # Szerviz
|
||||
REPAIR = "REPAIR" # Javítás
|
||||
ACCIDENT = "ACCIDENT" # Baleset
|
||||
INSPECTION = "INSPECTION" # Műszaki vizsga
|
||||
TIRE_CHANGE = "TIRE_CHANGE" # Gumi csere
|
||||
MAINTENANCE = "MAINTENANCE" # Karbantartás
|
||||
UPGRADE = "UPGRADE" # Fejlesztés
|
||||
RECALL = "RECALL" # Visszahívás
|
||||
OTHER = "OTHER" # Egyéb
|
||||
|
||||
class AssetEventCreate(BaseModel):
|
||||
"""Digitális Szervizkönyv esemény létrehozásához szükséges adatok."""
|
||||
event_type: AssetEventTypeEnum = Field(..., description="Esemény típusa")
|
||||
odometer_reading: Optional[int] = Field(None, ge=0, description="Km óra állás az eseménykor")
|
||||
description: str = Field(..., min_length=1, max_length=1000, description="Esemény leírása")
|
||||
event_date: Optional[datetime] = Field(None, description="Esemény dátuma (alapértelmezett: most)")
|
||||
cost_id: Optional[UUID] = Field(None, description="Kapcsolódó költség rekord ID (opcionális)")
|
||||
|
||||
# RBAC ellenőrzés: csak a tulajdonos vagy operátor szervezet adhat hozzá eseményt
|
||||
# Ezt a service rétegben validáljuk, nem a sémában
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class AssetEventResponse(BaseModel):
|
||||
"""Digitális Szervizkönyv esemény teljes válaszmodellje."""
|
||||
id: UUID
|
||||
asset_id: UUID
|
||||
user_id: Optional[int] = None
|
||||
organization_id: Optional[int] = None
|
||||
|
||||
event_type: str
|
||||
odometer_reading: Optional[int] = None
|
||||
description: Optional[str] = None
|
||||
cost_id: Optional[UUID] = None
|
||||
|
||||
event_date: datetime
|
||||
created_at: datetime
|
||||
updated_at: Optional[datetime] = None
|
||||
|
||||
# Kapcsolódó entitások (opcionális, csak ha eager loadoltuk)
|
||||
user_name: Optional[str] = Field(None, description="Felhasználó neve")
|
||||
organization_name: Optional[str] = Field(None, description="Szervezet neve")
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class AssetEventUpdate(BaseModel):
|
||||
"""Digitális Szervizkönyv esemény frissítéséhez szükséges adatok."""
|
||||
event_type: Optional[AssetEventTypeEnum] = Field(None, description="Esemény típusa")
|
||||
odometer_reading: Optional[int] = Field(None, ge=0, description="Km óra állás az eseménykor")
|
||||
description: Optional[str] = Field(None, min_length=1, max_length=1000, description="Esemény leírása")
|
||||
event_date: Optional[datetime] = Field(None, description="Esemény dátuma")
|
||||
cost_id: Optional[UUID] = Field(None, description="Kapcsolódó költség rekord ID")
|
||||
|
||||
@validator('description')
|
||||
def validate_description(cls, v):
|
||||
if v is not None and len(v.strip()) == 0:
|
||||
raise ValueError('Description cannot be empty or whitespace only')
|
||||
return v
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class AssetEventListResponse(BaseModel):
|
||||
"""Digitális Szervizkönyv események listázásának válasza."""
|
||||
items: List[AssetEventResponse] = Field(default_factory=list)
|
||||
total: int = Field(0, description="Összes esemény száma")
|
||||
page: int = Field(1, description="Aktuális oldal")
|
||||
page_size: int = Field(20, description="Oldalméret")
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
Reference in New Issue
Block a user