from sqlalchemy.dialects.mysql import LONGTEXT from sqlalchemy.orm import relationship from sqlalchemy import Column, String, ForeignKey from Utils.DataBase.SqlAlchemyUtils import Base, engine class ScoreCard(Base): __tablename__ = "scorecard" id = Column(String(16), primary_key=True) name = Column(String(16), unique=True, index=True) description = Column(LONGTEXT) subcategory_id = Column(String(16), ForeignKey("scorecard_subcategory.id")) subcategory = relationship("ScoreCardSubCategory", backref="scorecard", uselist=False) data_table = relationship("ScoreCardDataTable", backref="scorecard", uselist=False) index_table = relationship("ScoreCardIndexTable", backref="scorecard", uselist=False) rank_table = relationship("ScoreCardRankTable", backref="scorecard", uselist=False) process_table = relationship("ScoreCardProcessTable", backref="scorecard", uselist=False) scorecard_dp_ac_auth = relationship("ScoreCardDpAcAuth", back_populates="scorecard") class ScoreCardDataTable(Base): __tablename__ = "scorecard_data_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) class ScoreCardIndexTable(Base): __tablename__ = "scorecard_index_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) class ScoreCardRankTable(Base): __tablename__ = "scorecard_rank_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) class ScoreCardProcessTable(Base): __tablename__ = "scorecard_process_table" id = Column(String(16), primary_key=True) obj_id = Column(String(24)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) class ScoreCardDpAcAuth(Base): __tablename__ = "scorecard_dp_ac_auth" id = Column(String(16), primary_key=True) department_id = Column(String(16)) scorecard_id = Column(String(16), ForeignKey("scorecard.id")) scorecard = relationship("ScoreCard", back_populates="scorecard_dp_ac_auth") class ScoreCardSubCategory(Base): __tablename__ = "scorecard_subcategory" id = Column(String(16), primary_key=True) name = Column(String(32), unique=True, index=True) major_category_id = Column(String(16), ForeignKey("scorecard_major_category.id")) def dict(self): __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} __dict.pop("major_category_id") return __dict class ScoreCardMajorCategory(Base): __tablename__ = "scorecard_major_category" id = Column(String(16), primary_key=True) name = Column(String(32), unique=True, index=True) subcategories = relationship("ScoreCardSubCategory", backref="scorecard_major_category") def dict(self): __dict = {c.name: getattr(self, c.name, None) for c in self.__table__.columns} __dict.update({"subcategories": [subcategory.dict() for subcategory in list(self.subcategories)]}) return __dict Base.metadata.create_all(bind=engine)