intention.py 5.8 KB

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