Complete CarPass product flows

This commit is contained in:
VPN SaaS Dev
2026-05-14 21:19:37 +09:00
parent a83f55c646
commit c0014ab4ea
28 changed files with 3006 additions and 159 deletions

View File

@@ -1,7 +1,9 @@
from datetime import date, datetime
from decimal import Decimal
from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, field_validator
from app.services.vehicle_identity import validate_vin
class CarBase(BaseModel):
@@ -9,10 +11,15 @@ class CarBase(BaseModel):
make: str | None = None
model: str | None = None
trim: str | None = None
generation: str | None = None
body_type: str | None = None
year: int | None = None
plate_number: str | None = None
vin: str | None = None
fuel_type: str | None = None
engine_volume_l: Decimal | None = None
transmission: str | None = None
drive_type: str | None = None
target_consumption_l_per_100km: Decimal | None = None
fuel_tank_volume_l: Decimal | None = None
engine_oil_type: str | None = None
@@ -23,11 +30,33 @@ class CarBase(BaseModel):
brake_fluid_type: str | None = None
tire_pressure_front_bar: Decimal | None = None
tire_pressure_rear_bar: Decimal | None = None
tire_size: str | None = None
oil_change_interval_km: int | None = None
oil_change_interval_months: int | None = None
purchase_date: date | None = None
purchase_price: Decimal | None = None
purchase_currency: str | None = None
purchase_type: str = "unknown"
currency: str = "RUB"
include_depreciation: bool = False
expected_ownership_months: int | None = None
expected_residual_value: Decimal | None = None
loan_principal: Decimal | None = None
loan_down_payment: Decimal | None = None
loan_term_months: int | None = None
loan_annual_interest_rate: Decimal | None = None
loan_first_payment_date: date | None = None
loan_payment_day: int | None = None
loan_payment_type: str = "annuity"
loan_currency: str | None = None
loan_comment: str | None = None
current_odometer: int | None = None
notes: str | None = None
@field_validator("vin")
@classmethod
def validate_vin_field(cls, value: str | None) -> str | None:
return validate_vin(value)
class CarCreate(CarBase):
@@ -39,10 +68,15 @@ class CarUpdate(BaseModel):
make: str | None = None
model: str | None = None
trim: str | None = None
generation: str | None = None
body_type: str | None = None
year: int | None = None
plate_number: str | None = None
vin: str | None = None
fuel_type: str | None = None
engine_volume_l: Decimal | None = None
transmission: str | None = None
drive_type: str | None = None
target_consumption_l_per_100km: Decimal | None = None
fuel_tank_volume_l: Decimal | None = None
engine_oil_type: str | None = None
@@ -53,11 +87,33 @@ class CarUpdate(BaseModel):
brake_fluid_type: str | None = None
tire_pressure_front_bar: Decimal | None = None
tire_pressure_rear_bar: Decimal | None = None
tire_size: str | None = None
oil_change_interval_km: int | None = None
oil_change_interval_months: int | None = None
purchase_date: date | None = None
purchase_price: Decimal | None = None
purchase_currency: str | None = None
purchase_type: str | None = None
currency: str | None = None
include_depreciation: bool | None = None
expected_ownership_months: int | None = None
expected_residual_value: Decimal | None = None
loan_principal: Decimal | None = None
loan_down_payment: Decimal | None = None
loan_term_months: int | None = None
loan_annual_interest_rate: Decimal | None = None
loan_first_payment_date: date | None = None
loan_payment_day: int | None = None
loan_payment_type: str | None = None
loan_currency: str | None = None
loan_comment: str | None = None
current_odometer: int | None = None
notes: str | None = None
@field_validator("vin")
@classmethod
def validate_vin_field(cls, value: str | None) -> str | None:
return validate_vin(value)
class CarRead(CarBase):