ifixkart-backend/Backend/app/models/PartsModel.py

39 lines
1.8 KiB
Python

from sqlalchemy import Column, String, Boolean, Integer, Numeric, ForeignKey
from sqlalchemy.orm import relationship
from app.core.database.db_session import Base
class Part(Base):
__tablename__ = "parts"
part_id = Column(String(26), primary_key=True)
sku = Column(String(100), unique=True, nullable=False)
name = Column(String(255), nullable=False)
cost_price = Column(Numeric(10, 2), nullable=False)
low_stock_alert = Column(Integer, default=3)
supplier = Column(String(255), nullable=True)
barcode = Column(String(100), unique=True, nullable=True)
is_active = Column(Boolean, default=True)
compatibilities = relationship("PartDeviceCompatibility", back_populates="part", cascade="all, delete-orphan")
bom_variants = relationship("RepairVariantPart", back_populates="part", cascade="all, delete-orphan")
class PartDeviceCompatibility(Base):
__tablename__ = "part_device_compatibility"
id = Column(String(26), primary_key=True)
part_id = Column(String(26), ForeignKey("parts.part_id", ondelete="CASCADE"), nullable=False)
model_id = Column(String(26), nullable=False)
part = relationship("Part", back_populates="compatibilities")
model = relationship("DeviceModel", primaryjoin="DeviceModel.model_id == PartDeviceCompatibility.model_id", foreign_keys=[model_id])
class RepairVariantPart(Base):
__tablename__ = "repair_variant_parts"
id = Column(String(26), primary_key=True)
variant_id = Column(String(26), ForeignKey("repair_variants.variant_id", ondelete="CASCADE"), nullable=False)
part_id = Column(String(26), ForeignKey("parts.part_id", ondelete="RESTRICT"), nullable=False)
quantity = Column(Integer, default=1, nullable=False)
variant = relationship("RepairVariant", back_populates="bom_parts")
part = relationship("Part", back_populates="bom_variants")