Files
filam3d/backend/app/schemas/calculate.py
2026-03-22 12:40:33 +03:00

66 lines
1.3 KiB
Python

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] = []