filament_sku_settings.py 1.4 KB

12345678910111213141516171819202122232425262728
  1. from datetime import datetime
  2. from sqlalchemy import Boolean, DateTime, Integer, String, UniqueConstraint, func
  3. from sqlalchemy.orm import Mapped, mapped_column
  4. from backend.app.core.database import Base
  5. class FilamentSkuSettings(Base):
  6. """User-configured reorder settings for a filament SKU (material/subtype/brand group)."""
  7. __tablename__ = "filament_sku_settings"
  8. __table_args__ = (
  9. # sqlite_where ensures NULL columns participate in uniqueness (NULLS NOT DISTINCT).
  10. # On PostgreSQL the partial index is not needed — standard UNIQUE handles it.
  11. UniqueConstraint("material", "subtype", "brand", name="uq_filament_sku"),
  12. )
  13. id: Mapped[int] = mapped_column(primary_key=True)
  14. material: Mapped[str] = mapped_column(String(50))
  15. subtype: Mapped[str | None] = mapped_column(String(50))
  16. brand: Mapped[str | None] = mapped_column(String(100))
  17. lead_time_days: Mapped[int] = mapped_column(Integer, default=0)
  18. safety_margin_value: Mapped[int] = mapped_column(Integer, default=14)
  19. safety_margin_unit: Mapped[str] = mapped_column(String(10), default="days")
  20. alerts_snoozed: Mapped[bool] = mapped_column(Boolean, default=False)
  21. created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
  22. updated_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), onupdate=func.now())