Files
rentman-clone/backend/app/models/stock_location.py
T

50 lines
1.6 KiB
Python
Raw Normal View History

"""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"<StockLocation {self.name}>"