"""Stock location model for equipment storage locations.""" import uuid from datetime import datetime from sqlalchemy import String, DateTime, ForeignKey, func, Boolean from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db.base import Base class StockLocation(Base): """Represents a physical storage location for equipment.""" __tablename__ = "stock_locations" id: Mapped[str] = mapped_column( String(36), primary_key=True, default=lambda: str(uuid.uuid4()) ) account_id: Mapped[str] = mapped_column( String(36), ForeignKey("accounts.id", ondelete="CASCADE"), nullable=False ) name: Mapped[str] = mapped_column(String(255), nullable=False) address: Mapped[str | None] = mapped_column(String(500), nullable=True) is_default: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, ) # Relationships account: Mapped["Account"] = relationship("Account", back_populates="stock_locations") equipment_items: Mapped[list["Equipment"]] = relationship( "Equipment", back_populates="location" ) equipment_groups: Mapped[list["EquipmentGroup"]] = relationship( "EquipmentGroup", back_populates="default_location" ) def __repr__(self) -> str: return f""