filament.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. from datetime import datetime
  2. from pydantic import BaseModel, Field
  3. from backend.app.schemas.not_null import IgnoresNullForRequiredColumns
  4. class FilamentBase(BaseModel):
  5. name: str = Field(..., min_length=1, max_length=100)
  6. type: str = Field(..., min_length=1, max_length=50)
  7. brand: str | None = None
  8. color: str | None = None
  9. color_hex: str | None = Field(None, pattern=r"^#[0-9A-Fa-f]{6}$")
  10. cost_per_kg: float = 25.0
  11. spool_weight_g: float = 1000.0
  12. currency: str = "USD"
  13. density: float | None = None
  14. print_temp_min: int | None = None
  15. print_temp_max: int | None = None
  16. bed_temp_min: int | None = None
  17. bed_temp_max: int | None = None
  18. class FilamentCreate(FilamentBase):
  19. pass
  20. class FilamentUpdate(IgnoresNullForRequiredColumns):
  21. __orm_table__ = "filaments"
  22. name: str | None = None
  23. type: str | None = None
  24. brand: str | None = None
  25. color: str | None = None
  26. color_hex: str | None = None
  27. cost_per_kg: float | None = None
  28. spool_weight_g: float | None = None
  29. currency: str | None = None
  30. density: float | None = None
  31. print_temp_min: int | None = None
  32. print_temp_max: int | None = None
  33. bed_temp_min: int | None = None
  34. bed_temp_max: int | None = None
  35. class FilamentResponse(FilamentBase):
  36. id: int
  37. created_at: datetime
  38. updated_at: datetime
  39. class Config:
  40. from_attributes = True
  41. class FilamentCostCalculation(BaseModel):
  42. filament_id: int
  43. filament_name: str
  44. weight_grams: float
  45. cost: float
  46. currency: str