Files
print-calculator/backend/models/quote_request.py
2026-01-29 15:59:08 +01:00

38 lines
1.3 KiB
Python

from pydantic import BaseModel, Field, validator
from typing import Optional, Literal, Dict, Any
class QuoteRequest(BaseModel):
# File STL (base64 or path)
file_path: Optional[str] = None
file_base64: Optional[str] = None
# Parametri slicing
machine: str = Field(default="bambu_a1", description="Machine type")
filament: str = Field(default="pla_basic", description="Filament type")
quality: Literal["draft", "standard", "fine"] = Field(default="standard")
# Parametri opzionali
layer_height: Optional[float] = Field(None, ge=0.08, le=0.32)
infill_density: Optional[int] = Field(None, ge=0, le=100)
support_enabled: Optional[bool] = None
print_speed: Optional[int] = Field(None, ge=20, le=300)
# Pricing overrides
filament_cost_override: Optional[float] = None
@validator('machine')
def validate_machine(cls, v):
# This list should ideally be dynamic, but for validation purposes we start with known ones.
# Logic in ProfileManager can be looser or strict.
# For now, we allow the string through and let ProfileManager validate availability.
return v
@validator('filament')
def validate_filament(cls, v):
return v
class QuoteResponse(BaseModel):
success: bool
data: Optional[Dict[str, Any]] = None
error: Optional[str] = None