import json from applications.config import Chunk class TaskConst: INIT_STATUS = 0 PROCESSING_STATUS = 1 FINISHED_STATUS = 2 FAILED_STATUS = 3 class BaseMySQLClient: def __init__(self, pool): self.pool = pool class Contents(BaseMySQLClient): async def insert_content(self, doc_id, text): query = """ INSERT IGNORE INTO contents (doc_id, text) VALUES (%s, %s); """ return await self.pool.async_save(query=query, params=(doc_id, text)) async def update_content_status(self, doc_id, ori_status, new_status): query = """ UPDATE contents SET status = %s WHERE doc_id = %s AND status = %s; """ return await self.pool.async_save( query=query, params=(new_status, doc_id, ori_status) ) class ContentChunks(BaseMySQLClient): async def insert_chunk(self, chunk: Chunk) -> int: query = """ INSERT IGNORE INTO content_chunks (chunk_id, doc_id, text, tokens, topic_purity) VALUES (%s, %s, %s, %s, %s); """ return await self.pool.async_save( query=query, params=( chunk.chunk_id, chunk.doc_id, chunk.text, chunk.tokens, chunk.topic_purity, ), ) async def update_chunk_status(self, doc_id, chunk_id, ori_status, new_status): query = """ UPDATE content_chunks SET chunk_status = %s WHERE doc_id = %s AND chunk_id = %s AND chunk_status = %s; """ return await self.pool.async_save( query=query, params=(new_status, doc_id, chunk_id, ori_status) ) async def update_embedding_status(self, doc_id, chunk_id, ori_status, new_status): query = """ UPDATE content_chunks SET embedding_status = %s WHERE doc_id = %s AND chunk_id = %s AND embedding_status = %s; """ return await self.pool.async_save( query=query, params=(new_status, doc_id, chunk_id, ori_status) ) async def set_chunk_result(self, chunk: Chunk, ori_status, new_status): query = """ UPDATE content_chunks SET summary = %s, topic = %s, domain = %s, task_type = %s, concepts = %s, keywords = %s, questions = %s, chunk_status = %s WHERE doc_id = %s AND chunk_id = %s AND chunk_status = %s; """ return await self.pool.async_save( query=query, params=( chunk.summary, chunk.topic, chunk.domain, chunk.task_type, json.dumps(chunk.concepts), json.dumps(chunk.keywords), json.dumps(chunk.questions), new_status, chunk.doc_id, chunk.chunk_id, ori_status, ), )