slot_preset.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """Model for storing AMS slot to filament preset mappings.
  2. This stores the user's preferred filament preset for each AMS slot,
  3. similar to how Bambu Studio remembers preset selections.
  4. """
  5. from datetime import datetime
  6. from sqlalchemy import String, Integer, DateTime, ForeignKey, func, UniqueConstraint
  7. from sqlalchemy.orm import Mapped, mapped_column, relationship
  8. from backend.app.core.database import Base
  9. class SlotPresetMapping(Base):
  10. """Maps an AMS slot to a cloud filament preset."""
  11. __tablename__ = "slot_preset_mappings"
  12. __table_args__ = (
  13. UniqueConstraint("printer_id", "ams_id", "tray_id", name="uq_slot_preset"),
  14. )
  15. id: Mapped[int] = mapped_column(primary_key=True)
  16. printer_id: Mapped[int] = mapped_column(ForeignKey("printers.id", ondelete="CASCADE"))
  17. ams_id: Mapped[int] = mapped_column(Integer) # AMS unit ID (0, 1, 2, 3)
  18. tray_id: Mapped[int] = mapped_column(Integer) # Tray ID within AMS (0-3)
  19. preset_id: Mapped[str] = mapped_column(String(100)) # Cloud preset setting_id
  20. preset_name: Mapped[str] = mapped_column(String(200)) # Preset name for display
  21. created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
  22. updated_at: Mapped[datetime] = mapped_column(
  23. DateTime, server_default=func.now(), onupdate=func.now()
  24. )
  25. # Relationship
  26. printer: Mapped["Printer"] = relationship()
  27. from backend.app.models.printer import Printer # noqa: E402