You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from sqlalchemy import UUID, Column, Float, ForeignKey, Integer, String
|
|
from src.database.core import Base
|
|
from src.models import DefaultMixin
|
|
from sqlalchemy.orm import (
|
|
relationship,
|
|
declarative_base,
|
|
declared_attr,
|
|
remote,
|
|
foreign,
|
|
backref,
|
|
)
|
|
|
|
|
|
class EquipmentMaster(Base, DefaultMixin):
|
|
__table_args__ = {"extend_existing": True}
|
|
__tablename__ = "ms_equipment_master"
|
|
|
|
id = Column(UUID(as_uuid=True), primary_key=True, index=True)
|
|
name = Column(String, nullable=False)
|
|
parent_id = Column(
|
|
UUID(as_uuid=True),
|
|
ForeignKey("ms_equipment_master.id", ondelete="CASCADE"),
|
|
nullable=True,
|
|
)
|
|
equipment_tree_id = Column(
|
|
UUID(as_uuid=True),
|
|
ForeignKey("ms_equipment_tree.id", ondelete="CASCADE"),
|
|
nullable=True,
|
|
)
|
|
category_id = Column(UUID(as_uuid=True), nullable=True)
|
|
system_tag = Column(String, nullable=True)
|
|
assetnum = Column(String, nullable=True)
|
|
location_tag = Column(String, nullable=True)
|
|
image_name = Column(String, nullable=True)
|
|
description = Column(String, nullable=True)
|
|
# Relationship definitions
|
|
# Define both sides of the relationship
|
|
# parent = relationship(
|
|
# "EquipmentMaster",
|
|
# back_populates="children",
|
|
# remote_side=[id]
|
|
# )
|
|
|
|
children = relationship(
|
|
"EquipmentMaster", backref=backref("parent", remote_side=[id]), lazy="selectin"
|
|
)
|
|
|
|
equipment_tree = relationship(
|
|
"EquipmentTree",
|
|
lazy="selectin",
|
|
primaryjoin="and_(EquipmentTree.id == foreign(EquipmentMaster.equipment_tree_id))",
|
|
viewonly=True,
|
|
uselist=False,
|
|
)
|
|
|
|
|
|
class EquipmentTree(Base, DefaultMixin):
|
|
__tablename__ = "ms_equipment_tree"
|
|
|
|
level_no = Column(Integer, nullable=False)
|
|
name = Column(String, nullable=False)
|
|
|
|
# equipment_master = relationship(
|
|
# "EquipmentMaster",
|
|
# back_populates="equipment_tree",
|
|
# cascade="all, delete-orphan",
|
|
# lazy="selectin" # Using selectin for better performance with recursive loads
|
|
# )
|