33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from typing import Optional
|
|
|
|
from sqlalchemy import ForeignKey, Integer, String, Text
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from .base import Base, TimestampMixin
|
|
|
|
|
|
class Rack(Base, TimestampMixin):
|
|
__tablename__ = "racks"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
object_id: Mapped[int] = mapped_column(
|
|
Integer,
|
|
ForeignKey("objects.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
name: Mapped[str] = mapped_column(String(100), nullable=False)
|
|
rack_type: Mapped[Optional[str]] = mapped_column(String(50), nullable=True)
|
|
description: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
location: Mapped[Optional[str]] = mapped_column(String(200), nullable=True)
|
|
|
|
zone_id: Mapped[Optional[int]] = mapped_column(
|
|
Integer,
|
|
ForeignKey("zones.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
|
|
object: Mapped["Object"] = relationship("Object", back_populates="racks")
|
|
zone: Mapped[Optional["Zone"]] = relationship("Zone", back_populates="racks")
|
|
devices: Mapped[list["Device"]] = relationship("Device", back_populates="rack")
|