init
This commit is contained in:
0
backend/app/schemas/__init__.py
Normal file
0
backend/app/schemas/__init__.py
Normal file
65
backend/app/schemas/calculate.py
Normal file
65
backend/app/schemas/calculate.py
Normal 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] = []
|
||||
25
backend/app/schemas/material.py
Normal file
25
backend/app/schemas/material.py
Normal 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}
|
||||
18
backend/app/schemas/order.py
Normal file
18
backend/app/schemas/order.py
Normal 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
|
||||
Reference in New Issue
Block a user