This commit is contained in:
xds
2026-03-22 12:40:33 +03:00
commit 28a5d51389
61 changed files with 6085 additions and 0 deletions

View File

View File

@@ -0,0 +1,65 @@
from pydantic import BaseModel, Field
class BoundingBox(BaseModel):
x: float
y: float
z: float
class FileInfoResponse(BaseModel):
filename: str
format: str
volume_cm3: float
surface_area_cm2: float
bounding_box_mm: BoundingBox
is_watertight: bool
triangle_count: int
class MaterialInfo(BaseModel):
id: int
name: str
density_g_cm3: float
price_per_gram: float
class CalculationResult(BaseModel):
material: MaterialInfo
weight_grams: float
material_cost_rub: float
print_time_hours: float
time_cost_rub: float
post_processing_cost_rub: float
subtotal_rub: float
quantity: int
quantity_discount_percent: int
total_rub: float
estimated_days: int
class CalculateResponse(BaseModel):
success: bool = True
calculation_id: str
file_info: FileInfoResponse
calculation: CalculationResult
class AdvisorRequest(BaseModel):
task_description: str
budget_preference: str = "optimal"
file_info: dict | None = None
class AdvisorAlternative(BaseModel):
material_id: int
name: str
why: str
class AdvisorResponse(BaseModel):
recommended_material_id: int
recommended_material_name: str
reasoning: str
alternatives: list[AdvisorAlternative] = []
questions: list[str] = []

View File

@@ -0,0 +1,25 @@
from pydantic import BaseModel
class MaterialProperties(BaseModel):
max_temp_c: int | None = None
min_temp_c: int | None = None
strength: str | None = None
flexibility: str | None = None
chemical_resistance: str | None = None
uv_resistance: str | None = None
food_safe: bool = False
class MaterialResponse(BaseModel):
id: int
name: str
category: str
price_per_gram: float
density_g_cm3: float
flow_rate_mm3_s: float
properties: MaterialProperties
description: str | None = None
color_options: list[str] = []
model_config = {"from_attributes": True}

View File

@@ -0,0 +1,18 @@
from pydantic import BaseModel, Field
class OrderCreate(BaseModel):
calculation_id: str
client_name: str
client_phone: str = Field(pattern=r"^\+?\d{10,15}$")
client_email: str | None = None
client_company: str | None = None
delivery_method: str = "pickup"
comment: str | None = None
class OrderResponse(BaseModel):
order_id: str
status: str
total_rub: float
estimated_ready_date: str