from sqlalchemy import ( Column, Integer, String, ForeignKey, JSON, Text, DateTime, Float, func, ) from community_qa_bot.db import Base from community_qa_bot import signature class QaHistory(Base): id = Column(Integer, primary_key=True) user_id = Column(String(50), ForeignKey('users.id')) slack_message_id = Column(String(50)) thread_ts = Column(String(100)) response_message_ts = Column(String(100)) discord_message_id = Column(String(100)) discord_response_message_id = Column(String(100)) discord_channel_id = Column(String(100)) request_body = Column(JSON, default=[]) response_text = Column(Text) ai_chat_id = Column(String(100)) ai_chat_message_id = Column(String(100)) spend_time = Column(Float, comment='seconds') created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) __tablename__ = 'qa_histories' @property def qa_context(self): if self.response_text: return self.request_body + [{'role': 'assistant', 'content': self.response_text}] return self.request_body def _signature_payload(self, user_id): return f'{self.id}#{user_id}' def make_signature(self, user_id): return signature.sign(self._signature_payload(user_id)) def verify_signature(self, user_id, raw_signature): return signature.verify(self._signature_payload(user_id), raw_signature) def get_signature_url(self, user_id): return f'https://qa-bot.tidb.io/qa/{self.id}?u={user_id}&s={self.make_signature(user_id)}'