intention.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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__ = (db.PrimaryKeyConstraint("id", name="intention_type_id_pkey"),)
  7. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  8. name = db.Column(db.String(255), nullable=False)
  9. created_by = db.Column(StringUUID, nullable=False)
  10. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  11. updated_by = db.Column(StringUUID, nullable=True)
  12. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  13. @property
  14. def intention_count(self):
  15. return db.session.query(func.count(Intention.id)).filter(Intention.type_id == self.id).scalar()
  16. @property
  17. def intentions(self):
  18. return db.session.query(Intention).filter(Intention.type_id == self.id).all()
  19. class Intention(db.Model):
  20. __tablename__ = "intentions"
  21. __table_args__ = (
  22. db.PrimaryKeyConstraint("id", name="intention_pkey"),
  23. db.Index("intention_type_idx", "type_id"),
  24. )
  25. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  26. type_id = db.Column(StringUUID, nullable=False)
  27. name = db.Column(db.String(255), nullable=False)
  28. created_by = db.Column(StringUUID, nullable=False)
  29. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  30. updated_by = db.Column(StringUUID, nullable=True)
  31. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  32. @property
  33. def type_name(self):
  34. return db.session.query(IntentionType.name).filter(IntentionType.id == self.type_id).first().name
  35. @property
  36. def type(self):
  37. return db.session.query(IntentionType).filter(IntentionType.id == self.type_id).first()
  38. @property
  39. def corpus(self):
  40. return db.session.query(IntentionCorpus).filter(IntentionCorpus.intention_id == self.id).all()
  41. @property
  42. def keywords(self):
  43. return db.session.query(IntentionKeyword).filter(IntentionKeyword.intention_id == self.id).all()
  44. @property
  45. def corpus_count(self):
  46. return db.session.query(func.count(IntentionCorpus.id)).filter(IntentionCorpus.intention_id == self.id).scalar()
  47. @property
  48. def keywords_count(self):
  49. return (
  50. db.session.query(func.count(IntentionKeyword.id)).filter(IntentionKeyword.intention_id == self.id).scalar()
  51. )
  52. class IntentionKeyword(db.Model):
  53. __tablename__ = "intention_keywords"
  54. __table_args__ = (db.PrimaryKeyConstraint("id", name="intention_keyword_pkey"),)
  55. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  56. name = db.Column(db.String(255), nullable=False)
  57. intention_id = db.Column(StringUUID, nullable=False)
  58. created_by = db.Column(StringUUID, nullable=False)
  59. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  60. updated_by = db.Column(StringUUID, nullable=True)
  61. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  62. @property
  63. def intention(self):
  64. return db.session.query(Intention).filter(Intention.id == self.intention_id).first()
  65. class IntentionCorpus(db.Model):
  66. __tablename__ = "intention_corpus"
  67. __table_args__ = (
  68. db.PrimaryKeyConstraint("id", name="intention_corpus_pkey"),
  69. db.Index("intention_corpus_idx", "intention_id"),
  70. )
  71. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  72. question = db.Column(db.String(255), nullable=False)
  73. question_config = db.Column(db.JSON, nullable=False)
  74. intention_id = db.Column(StringUUID, nullable=False)
  75. created_by = db.Column(StringUUID, nullable=False)
  76. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  77. updated_by = db.Column(StringUUID, nullable=True)
  78. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  79. @property
  80. def intention(self):
  81. return db.session.query(Intention).filter(Intention.id == self.intention_id).first()
  82. @property
  83. def similarity_questions(self):
  84. return (
  85. db.session.query(IntentionCorpusSimilarityQuestion)
  86. .filter(IntentionCorpusSimilarityQuestion.corpus_id == self.id)
  87. .all()
  88. )
  89. class IntentionCorpusSimilarityQuestion(db.Model):
  90. __tablename__ = "intention_corpus_similarity_questions"
  91. __table_args__ = (
  92. db.PrimaryKeyConstraint("id", name="intention_corpus_similarity_question_pkey"),
  93. db.Index("intention_corpus_similarity_question_idx", "corpus_id"),
  94. )
  95. id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()"))
  96. question = db.Column(db.String(255), nullable=False)
  97. question_config = db.Column(db.JSON, nullable=False)
  98. corpus_id = db.Column(StringUUID, nullable=False)
  99. created_by = db.Column(StringUUID, nullable=False)
  100. created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp())
  101. updated_by = db.Column(StringUUID, nullable=True)
  102. updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp())
  103. @property
  104. def corpus(self):
  105. return db.session.query(IntentionCorpus).filter(IntentionCorpus.id == self.corpus_id).first()