Merge pull request #90 from ThomasRubini/model_change

This commit is contained in:
Thomas Rubini 2023-03-12 12:30:15 +01:00 committed by GitHub
commit 8feebb3454
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 80 additions and 36 deletions

View File

@ -51,14 +51,14 @@ def get_npc_random_answer(npc_id:int, qa_type:int) -> Answer :
answers = db.session.query(Answer).filter_by(QA_TYPE=qa_type,NPC_ID=npc_id.NPC_ID).all() answers = db.session.query(Answer).filter_by(QA_TYPE=qa_type,NPC_ID=npc_id.NPC_ID).all()
return random.choice(answers) return random.choice(answers)
def get_random_question(qa_type: int) -> Question : def get_random_question(qa_type: int) -> QuestionType :
""" """
Returns a random inspector question from a question type Returns a random inspector question from a question type
:param qa_type: the type of the question :param qa_type: the type of the question
:return: a Question object :return: a Question object
""" """
answers = db.session.query(Question).filter_by(QUESTION_TYPE=qa_type).all() answers = db.session.query(QuestionType).filter_by(QUESTION_TYPE_ID=qa_type).all()
return random.choice(answers) return random.choice(answers)
def get_trait_from_text(text: str) -> int: def get_trait_from_text(text: str) -> int:

View File

@ -4,23 +4,52 @@ from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base() Base = declarative_base()
class Locale(Base): class Text(Base):
""" """
Stores the different texts needed by the other tables in multiple languages Stores the different texts needed by the Locale table in multiple languages
A LID and a language may be associated with multiple texts (mostly in the case we need to choose a text at random)
""" """
__tablename__ = 'T_LOCALE' __tablename__ = 'T_TEXT'
TEXT_ID = Column(Integer, primary_key=True, comment="ID of this text (the other tables references to this with *_LID columns)")
LANG = Column(VARCHAR(2), primary_key=True, comment="lang ID of the text value in this row, e.g FR, EN, ES")
TEXT = Column(Text, comment="Actual text stored for that text ID and lang")
def __init__(self, TEXT_ID, LANG, TEXT): TEXT_ID = Column(Integer, primary_key=True, comment="ID of this specific text. These IDs may be recycled in the future and may only be used for a short time period.")
LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Reference to the locale that this text provides")
LANG = Column(VARCHAR(2), comment="lang ID of the text value in this row, e.g FR, EN, ES")
TEXT = Column(Text, comment="Actual text stored")
LOCALE = relationship("Locale")
def __init__(self, TEXT_ID, LID, LANG, TEXT):
self.TEXT_ID = TEXT_ID self.TEXT_ID = TEXT_ID
self.LID = LID
self.LANG = LANG self.LANG = LANG
self.TEXT = TEXT self.TEXT = TEXT
def __str__(self): def __str__(self):
return f"{self.TEXT_ID} {self.LANG} {self.TEXT}" return f"Text(TEXT_ID={self.TEXT_ID}, LID={self.LID}, LANG={self.LANG}, TEXT={self.TEXT})"
def __repr__(self) -> str:
return self.__str__()
class Locale(Base):
"""
Each row represent a text that is needed by other tables.
the 'Text' table will reference these LIDs with the actual text in multiple languages
Stores the different texts needed by the other tables
"""
__tablename__ = 'T_LOCALE'
LID = Column(Integer, primary_key=True, comment="ID of this locale (the other tables references to this with *_LID columns)")
def __init__(self, LID):
self.LID = LID
def __str__(self):
return f"Locale(LID={self.LID})"
def __repr__(self) -> str:
return self.__str__()
class Place(Base): class Place(Base):
@ -30,7 +59,7 @@ class Place(Base):
__tablename__ = 'T_PLACE' __tablename__ = 'T_PLACE'
PLACE_ID = Column(Integer, primary_key=True, comment="ID of this place") PLACE_ID = Column(Integer, primary_key=True, comment="ID of this place")
NAME_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID"), comment="Place name") NAME_LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Place name")
LOCALE = relationship("Locale") LOCALE = relationship("Locale")
def __init__(self, PLACE_ID, NAME_LID): def __init__(self, PLACE_ID, NAME_LID):
@ -38,27 +67,31 @@ class Place(Base):
self.NAME_LID = NAME_LID self.NAME_LID = NAME_LID
def __str__(self): def __str__(self):
return f"{self.PLACE_ID} {self.NAME_LID}" return f"Place(PLACE_ID={self.PLACE_ID} NAME_LID={self.NAME_LID})"
def __repr__(self) -> str:
return self.__str__()
class Question(Base): class QuestionType(Base):
""" """
Stores questions asked by players Stores questions types that can be asked by players, e.g "where", "with tho"
""" """
__tablename__ = "T_QUESTION" __tablename__ = "T_QUESTION_TYPE"
QUESTION_ID = Column(Integer, primary_key=True, comment="ID of this question") QUESTION_TYPE_ID = Column(Integer, primary_key=True, comment="ID of this question type.")
QUESTION_TYPE = Column(Integer, comment="Question type ID, e.g 'when..', 'where..'") TEXT_LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Question text")
TEXT_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID"), comment="Question text")
LOCALE = relationship("Locale") LOCALE = relationship("Locale")
def __init__(self, QUESTION_ID, QUESTION_TYPE, TEXT_LID): def __init__(self, QUESTION_TYPE_ID, TEXT_LID):
self.QUESTION_ID = QUESTION_ID self.QUESTION_TYPE_ID = QUESTION_TYPE_ID
self.QUESTION_TYPE = QUESTION_TYPE
self.TEXT_LID = TEXT_LID self.TEXT_LID = TEXT_LID
def __str__(self): def __str__(self):
return f"{self.QUESTION_ID} {self.QUESTION_TYPE} {self.TEXT_LID}" return f"QuestionType(QUESTION_TYPE_ID={self.QUESTION_TYPE_ID}, TEXT_LID={self.TEXT_LID})"
def __repr__(self) -> str:
return self.__str__()
class Answer(Base): class Answer(Base):
@ -68,21 +101,23 @@ class Answer(Base):
""" """
__tablename__ = "T_ANSWER" __tablename__ = "T_ANSWER"
ANSWER_ID = Column(Integer, primary_key=True, comment="ID of this answer") QUESTION_TYPE_ID = Column(Integer, ForeignKey("T_QUESTION_TYPE.QUESTION_TYPE_ID"), primary_key=True, comment="Question type ID")
QA_TYPE = Column(Integer, comment="Question type ID") NPC_ID = Column(Integer, ForeignKey("T_NPC.NPC_ID"), primary_key=True, comment="ID of the NPC that will say this answer")
NPC_ID = Column(Integer, ForeignKey("T_NPC.NPC_ID"), comment="ID of the NPC that will say this answer") TEXT_LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Text of the answer")
TEXT_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID"), comment="Text of the answer")
LOCALE = relationship("Locale") LOCALE = relationship("Locale")
NPC = relationship("Npc") NPC = relationship("Npc")
def __init__(self, ANSWER_ID, QA_TYPE, NPC_ID, TEXT_LID): def __init__(self, QUESTION_TYPE_ID, NPC_ID, TEXT_LID):
self.ANSWER_ID = ANSWER_ID self.QUESTION_TYPE_ID = QUESTION_TYPE_ID
self.QA_TYPE = QA_TYPE
self.NPC_ID = NPC_ID self.NPC_ID = NPC_ID
self.TEXT_LID = TEXT_LID self.TEXT_LID = TEXT_LID
def __str__(self): def __str__(self):
return f"{self.ANSWER_ID} {self.QA_TYPE} {self.NPC_ID} {self.TEXT_LID}" return f"Answer(QUESTION_TYPE_ID={self.QUESTION_TYPE_ID}, NPC_ID={self.NPC_ID}, TEXT_LID={self.TEXT_LID})"
def __repr__(self) -> str:
return self.__str__()
class Npc(Base): class Npc(Base):
@ -92,7 +127,7 @@ class Npc(Base):
__tablename__ = "T_NPC" __tablename__ = "T_NPC"
NPC_ID = Column(Integer, primary_key=True, comment="ID of this Npc") NPC_ID = Column(Integer, primary_key=True, comment="ID of this Npc")
NAME_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID"), comment="Name of this Npc") NAME_LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Name of this Npc")
LOCALE = relationship("Locale") LOCALE = relationship("Locale")
def __init__(self, NPC_ID, NAME_LID): def __init__(self, NPC_ID, NAME_LID):
@ -100,7 +135,10 @@ class Npc(Base):
self.NAME_LID = NAME_LID self.NAME_LID = NAME_LID
def __str__(self) -> str: def __str__(self) -> str:
return f"{self.NPC_ID} {self.NAME_LID}" return f"Npc(NPC_ID={self.NPC_ID}, NAME_LID={self.NAME_LID})"
def __repr__(self) -> str:
return self.__str__()
class Trait(Base): class Trait(Base):
@ -109,8 +147,8 @@ class Trait(Base):
""" """
__tablename__ = "T_TRAIT" __tablename__ = "T_TRAIT"
TRAIT_ID = Column(Integer, primary_key=True, comment="ID of this trait") TRAIT_ID = Column(Integer, primary_key=True, comment="ID of this trait")
NAME_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID"), comment="Name of this trait") NAME_LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Name of this trait")
DESC_LID = Column(Integer, ForeignKey("T_LOCALE.TEXT_ID"), comment="Description of this trait") DESC_LID = Column(Integer, ForeignKey("T_LOCALE.LID"), comment="Description of this trait")
Name = relationship("Locale",foreign_keys=[NAME_LID]) Name = relationship("Locale",foreign_keys=[NAME_LID])
Desc = relationship("Locale",foreign_keys=[DESC_LID]) Desc = relationship("Locale",foreign_keys=[DESC_LID])
@ -121,7 +159,10 @@ class Trait(Base):
self.NAME_LID = NAME_LID self.NAME_LID = NAME_LID
def __str__(self) -> str: def __str__(self) -> str:
return f"{self.TRAIT_ID} {self.NAME_LID}" return f"Trait(TRAIT_ID={self.TRAIT_ID}, NAME_LID={self.NAME_LID})"
def __repr__(self) -> str:
return self.__str__()
class Reaction(Base): class Reaction(Base):
@ -141,4 +182,7 @@ class Reaction(Base):
self.TRAIT_ID = TRAIT_ID self.TRAIT_ID = TRAIT_ID
def __str__(self) -> str: def __str__(self) -> str:
return f"{self.REACTION_ID} {self.NPC_ID} {self.TRAIT_ID}" return f"Reaction(REACTION_ID={self.REACTION_ID}, NPC_ID={self.NPC_ID}, TRAIT_ID={self.TRAIT_ID})"
def __repr__(self) -> str:
return self.__str__()