refaktorálás javításai
This commit is contained in:
56
backend/app/schemas/vehicle.py
Normal file
56
backend/app/schemas/vehicle.py
Normal file
@@ -0,0 +1,56 @@
|
||||
"""
|
||||
Jármű értékelési sémák a Social 1 modulhoz.
|
||||
"""
|
||||
from pydantic import BaseModel, Field, validator
|
||||
from typing import Optional
|
||||
from uuid import UUID
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class VehicleRatingCreate(BaseModel):
|
||||
"""Értékelés beküldéséhez használt séma."""
|
||||
driving_experience: int = Field(..., ge=1, le=10, description="Vezetési élmény 1-10 skálán")
|
||||
reliability: int = Field(..., ge=1, le=10, description="Megbízhatóság 1-10 skálán")
|
||||
comfort: int = Field(..., ge=1, le=10, description="Kényelem 1-10 skálán")
|
||||
consumption_satisfaction: int = Field(..., ge=1, le=10, description="Fogyasztás elégedettség 1-10 skálán")
|
||||
comment: Optional[str] = Field(None, max_length=1000, description="Opcionális megjegyzés")
|
||||
|
||||
@validator('driving_experience', 'reliability', 'comfort', 'consumption_satisfaction')
|
||||
def validate_rating_range(cls, v):
|
||||
if not 1 <= v <= 10:
|
||||
raise ValueError('Értékelésnek 1 és 10 között kell lennie')
|
||||
return v
|
||||
|
||||
|
||||
class VehicleRatingResponse(BaseModel):
|
||||
"""Értékelés válasza, tartalmazza a számított átlagpontszámot."""
|
||||
id: UUID
|
||||
vehicle_id: int
|
||||
user_id: int
|
||||
driving_experience: int
|
||||
reliability: int
|
||||
comfort: int
|
||||
consumption_satisfaction: int
|
||||
comment: Optional[str]
|
||||
average_score: float = Field(..., description="Számított átlagpontszám (4 dimenzió átlaga)")
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@validator('average_score', pre=True, always=True)
|
||||
def calculate_average(cls, v, values):
|
||||
"""Számolja ki az átlagpontszámot, ha nincs megadva."""
|
||||
if v is not None:
|
||||
return v
|
||||
# Ha nincs megadva, számoljuk ki a 4 dimenzióból
|
||||
scores = [
|
||||
values.get('driving_experience'),
|
||||
values.get('reliability'),
|
||||
values.get('comfort'),
|
||||
values.get('consumption_satisfaction')
|
||||
]
|
||||
if any(score is None for score in scores):
|
||||
raise ValueError('Nem lehet kiszámolni az átlagot hiányzó értékelések miatt')
|
||||
return sum(scores) / 4.0
|
||||
Reference in New Issue
Block a user