filament.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from datetime import datetime
  2. from sqlalchemy import String, Float, DateTime, func
  3. from sqlalchemy.orm import Mapped, mapped_column
  4. from backend.app.core.database import Base
  5. class Filament(Base):
  6. """Filament type with cost information."""
  7. __tablename__ = "filaments"
  8. id: Mapped[int] = mapped_column(primary_key=True)
  9. name: Mapped[str] = mapped_column(String(100))
  10. type: Mapped[str] = mapped_column(String(50)) # PLA, PETG, ABS, etc.
  11. brand: Mapped[str | None] = mapped_column(String(100))
  12. color: Mapped[str | None] = mapped_column(String(50))
  13. color_hex: Mapped[str | None] = mapped_column(String(7)) # #RRGGBB
  14. # Cost information
  15. cost_per_kg: Mapped[float] = mapped_column(Float, default=25.0)
  16. spool_weight_g: Mapped[float] = mapped_column(Float, default=1000.0)
  17. currency: Mapped[str] = mapped_column(String(3), default="USD")
  18. # Properties
  19. density: Mapped[float | None] = mapped_column(Float) # g/cm³
  20. print_temp_min: Mapped[int | None] = mapped_column()
  21. print_temp_max: Mapped[int | None] = mapped_column()
  22. bed_temp_min: Mapped[int | None] = mapped_column()
  23. bed_temp_max: Mapped[int | None] = mapped_column()
  24. created_at: Mapped[datetime] = mapped_column(
  25. DateTime, server_default=func.now()
  26. )
  27. updated_at: Mapped[datetime] = mapped_column(
  28. DateTime, server_default=func.now(), onupdate=func.now()
  29. )