from pydantic import BaseModel, Field from typing import Optional, List from enum import Enum from models import EngineType, HybridType, PowerRatio class EngineTypeEnum(str, Enum): PETROL = "бензиновый" DIESEL = "дизельный" ELECTRIC = "электрический" class HybridTypeEnum(str, Enum): NONE = "не гибрид" HYBRID = "электрогибрид" PHEV = "электрогибрид(PHEV)" class PowerRatioEnum(str, Enum): ICE_GREATER = "ДВС > ЭД" ELECTRIC_GREATER = "ЭД > ДВС" NA = "не применимо" # Схемы для авторизации class Token(BaseModel): access_token: str token_type: str class TokenData(BaseModel): username: Optional[str] = None # Схемы для пользователя-админа class AdminBase(BaseModel): username: str class AdminCreate(AdminBase): password: str is_super_admin: Optional[bool] = False class Admin(AdminBase): id: int is_active: bool is_super_admin: bool class Config: from_attributes = True class CarBase(BaseModel): image: Optional[str] = None name: str price: float base_price: float country_of_origin: str year: int drive_type: str mileage: Optional[int] = None engine_capacity: Optional[float] = None engine_power: Optional[int] = None engine_type: EngineTypeEnum electric_motor_power: Optional[int] = None hybrid_type: HybridTypeEnum = HybridTypeEnum.NONE power_ratio: PowerRatioEnum = PowerRatioEnum.NA class CarCreate(CarBase): pass class CarUpdate(BaseModel): image: Optional[str] = None name: Optional[str] = None price: Optional[float] = None base_price: Optional[float] = None country_of_origin: Optional[str] = None year: Optional[int] = None drive_type: Optional[str] = None mileage: Optional[int] = None engine_capacity: Optional[float] = None engine_power: Optional[int] = None engine_type: Optional[EngineTypeEnum] = None electric_motor_power: Optional[int] = None hybrid_type: Optional[HybridTypeEnum] = None power_ratio: Optional[PowerRatioEnum] = None class Car(CarBase): id: int class Config: from_attributes = True class CarResponse(BaseModel): car: Car class CarsResponse(BaseModel): cars: List[Car] total: int # Персонал --------- class PersonalBase(BaseModel): name: str surname: str role: str photo: Optional[str] = None class PersonalCreate(PersonalBase): pass class PersonalUpdate(BaseModel): name: Optional[str] = None surname: Optional[str] = None role: Optional[str] = None photo: Optional[str] = None class Personal(PersonalBase): id: int class Config: from_attributes = True class PersonalResponse(BaseModel): personal: Personal class PersonalListResponse(BaseModel): staff: List[Personal] total: int