from sqlalchemy import func from .engine import db from .types import StringUUID class IntentionType(db.Model): __tablename__ = 'intention_types' __table_args__ = ( db.PrimaryKeyConstraint('id', name='intention_type_id_pkey'), ) id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()")) name = db.Column(db.String(255), nullable=False) created_by = db.Column(StringUUID, nullable=False) created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) updated_by = db.Column(StringUUID, nullable=True) updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp()) @property def intention_count(self): return ( db.session.query(func.count(Intention.id)) .filter(Intention.type_id==self.id) .scalar() ) class Intention(db.Model): __tablename__ = "intentions" __table_args__ = ( db.PrimaryKeyConstraint("id", name="intention_pkey"), db.Index("intention_type_idx", "type_id"), ) id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()")) type_id = db.Column(StringUUID, nullable=False) name = db.Column(db.String(255), nullable=False) created_by = db.Column(StringUUID, nullable=False) created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) updated_by = db.Column(StringUUID, nullable=True) updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp()) @property def type_name(self): return ( db.session.query(IntentionType.name) .filter(IntentionType.id==self.type_id) .first().name ) @property def type(self): return ( db.session.query(IntentionType) .filter(IntentionType.id==self.type_id) .first() ) @property def corpus(self): return ( db.session.query(IntentionCorpus) .filter(IntentionCorpus.intention_id==self.id) .all() ) @property def keywords(self): return ( db.session.query(IntentionKeyword) .filter(IntentionKeyword.intention_id==self.id) .all() ) @property def corpus_count(self): return ( db.session.query(func.count(IntentionCorpus.id)) .filter(IntentionCorpus.intention_id == self.id) .scalar() ) @property def keywords_count(self): return ( db.session.query(func.count(IntentionKeyword.id)) .filter(IntentionKeyword.intention_id == self.id) .scalar() ) class IntentionKeyword(db.Model): __tablename__ = "intention_keywords" __table_args__ = ( db.PrimaryKeyConstraint('id', name='intention_keyword_pkey'), ) id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()")) name = db.Column(db.String(255), nullable=False) intention_id = db.Column(StringUUID, nullable=False) created_by = db.Column(StringUUID, nullable=False) created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) updated_by = db.Column(StringUUID, nullable=True) updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp()) @property def intention(self): return ( db.session.query(Intention).filter(Intention.id==self.intention_id).first() ) class IntentionCorpus(db.Model): __tablename__ = "intention_corpus" __table_args__ = ( db.PrimaryKeyConstraint('id', name='intention_corpus_pkey'), db.Index("intention_corpus_idx", "intention_id"), ) id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()")) question = db.Column(db.String(255), nullable=False) question_config = db.Column(db.JSON, nullable=False) intention_id = db.Column(StringUUID, nullable=False) created_by = db.Column(StringUUID, nullable=False) created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) updated_by = db.Column(StringUUID, nullable=True) updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp()) @property def intention(self): return ( db.session.query(Intention) .filter(Intention.id==self.intention_id) .first() ) @property def similarity_questions(self): return ( db.session.query(IntentionCorpusSimilarityQuestion) .filter(IntentionCorpusSimilarityQuestion.corpus_id==self.id) .all() ) class IntentionCorpusSimilarityQuestion(db.Model): __tablename__ = "intention_corpus_similarity_questions" __table_args__ = ( db.PrimaryKeyConstraint('id', name='intention_corpus_similarity_question_pkey'), db.Index("intention_corpus_similarity_question_idx", "corpus_id"), ) id = db.Column(StringUUID, nullable=False, server_default=db.text("uuid_generate_v4()")) question = db.Column(db.String(255), nullable=False) question_config = db.Column(db.JSON, nullable=False) corpus_id = db.Column(StringUUID, nullable=False) created_by = db.Column(StringUUID, nullable=False) created_at = db.Column(db.DateTime, nullable=False, server_default=func.current_timestamp()) updated_by = db.Column(StringUUID, nullable=True) updated_at = db.Column(db.DateTime, nullable=True, server_default=func.current_timestamp()) @property def corpus(self): return ( db.session.query(IntentionCorpus) .filter(IntentionCorpus.id==self.corpus_id) .first() )