intention.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. from sqlalchemy import func
  2. from .engine import db
  3. from .types import StringUUID
  4. class IntentionType(db.Model):
  5. __tablename__ = 'intention_types'
  6. __table_args__ = (
  7. db.PrimaryKeyConstraint('id', name='intention_type_id_pkey'),
  8. )
  9. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  10. name = db.Column(db.String(255), nullable=False)
  11. created_by = db.Column(StringUUID, nullable=False)
  12. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  13. updated_by = db.Column(StringUUID, nullable=True)
  14. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  15. @property
  16. def intention_count(self):
  17. return (
  18. db.session.query(func.count(Intention.id))
  19. .filter(Intention.type_id==self.id)
  20. .scalar()
  21. )
  22. @property
  23. def intentions(self):
  24. return (
  25. db.session.query(Intention)
  26. .filter(Intention.type_id == self.id)
  27. .all()
  28. )
  29. class Intention(db.Model):
  30. __tablename__ = "intentions"
  31. __table_args__ = (
  32. db.PrimaryKeyConstraint("id", name="intention_pkey"),
  33. db.Index("intention_type_idx", "type_id"),
  34. )
  35. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  36. type_id = db.Column(StringUUID, nullable=False)
  37. name = db.Column(db.String(255), nullable=False)
  38. created_by = db.Column(StringUUID, nullable=False)
  39. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  40. updated_by = db.Column(StringUUID, nullable=True)
  41. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  42. @property
  43. def type_name(self):
  44. return (
  45. db.session.query(IntentionType.name)
  46. .filter(IntentionType.id==self.type_id)
  47. .first().name
  48. )
  49. @property
  50. def type(self):
  51. return (
  52. db.session.query(IntentionType)
  53. .filter(IntentionType.id==self.type_id)
  54. .first()
  55. )
  56. @property
  57. def corpus(self):
  58. return (
  59. db.session.query(IntentionCorpus)
  60. .filter(IntentionCorpus.intention_id==self.id)
  61. .all()
  62. )
  63. @property
  64. def keywords(self):
  65. return (
  66. db.session.query(IntentionKeyword)
  67. .filter(IntentionKeyword.intention_id==self.id)
  68. .all()
  69. )
  70. @property
  71. def corpus_count(self):
  72. return (
  73. db.session.query(func.count(IntentionCorpus.id))
  74. .filter(IntentionCorpus.intention_id == self.id)
  75. .scalar()
  76. )
  77. @property
  78. def keywords_count(self):
  79. return (
  80. db.session.query(func.count(IntentionKeyword.id))
  81. .filter(IntentionKeyword.intention_id == self.id)
  82. .scalar()
  83. )
  84. class IntentionKeyword(db.Model):
  85. __tablename__ = "intention_keywords"
  86. __table_args__ = (
  87. db.PrimaryKeyConstraint('id', name='intention_keyword_pkey'),
  88. )
  89. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  90. name = db.Column(db.String(255), nullable=False)
  91. intention_id = db.Column(StringUUID, nullable=False)
  92. created_by = db.Column(StringUUID, nullable=False)
  93. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  94. updated_by = db.Column(StringUUID, nullable=True)
  95. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  96. @property
  97. def intention(self):
  98. return (
  99. db.session.query(Intention).filter(Intention.id==self.intention_id).first()
  100. )
  101. class IntentionCorpus(db.Model):
  102. __tablename__ = "intention_corpus"
  103. __table_args__ = (
  104. db.PrimaryKeyConstraint('id', name='intention_corpus_pkey'),
  105. db.Index("intention_corpus_idx", "intention_id"),
  106. )
  107. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  108. question = db.Column(db.String(255), nullable=False)
  109. question_config = db.Column(db.JSON, nullable=False)
  110. intention_id = db.Column(StringUUID, nullable=False)
  111. created_by = db.Column(StringUUID, nullable=False)
  112. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  113. updated_by = db.Column(StringUUID, nullable=True)
  114. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  115. @property
  116. def intention(self):
  117. return (
  118. db.session.query(Intention)
  119. .filter(Intention.id==self.intention_id)
  120. .first()
  121. )
  122. @property
  123. def similarity_questions(self):
  124. return (
  125. db.session.query(IntentionCorpusSimilarityQuestion)
  126. .filter(IntentionCorpusSimilarityQuestion.corpus_id==self.id)
  127. .all()
  128. )
  129. class IntentionCorpusSimilarityQuestion(db.Model):
  130. __tablename__ = "intention_corpus_similarity_questions"
  131. __table_args__ = (
  132. db.PrimaryKeyConstraint('id', name='intention_corpus_similarity_question_pkey'),
  133. db.Index("intention_corpus_similarity_question_idx", "corpus_id"),
  134. )
  135. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  136. question = db.Column(db.String(255), nullable=False)
  137. question_config = db.Column(db.JSON, nullable=False)
  138. corpus_id = db.Column(StringUUID, nullable=False)
  139. created_by = db.Column(StringUUID, nullable=False)
  140. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  141. updated_by = db.Column(StringUUID, nullable=True)
  142. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  143. @property
  144. def corpus(self):
  145. return (
  146. db.session.query(IntentionCorpus)
  147. .filter(IntentionCorpus.id==self.corpus_id)
  148. .first()
  149. )