Files
assist/src/repositories/conversation_repo.py
Jeason e0316af12e refactor: 架构演进 Repository 层 + 旧代码清理
任务 1.1: 引入 Repository 层
- BaseRepository 基类:自动 tenant_id 过滤、CRUD、分页、批量删除
- WorkOrderRepository: 工单列表(状态/优先级过滤)、飞书记录查找
- AlertRepository: 预警列表(级别/活跃过滤)、解决预警
- ChatSessionRepository: 会话列表(状态/搜索过滤)
- ConversationRepository: 按 session_id 查对话
- KnowledgeRepository: 知识库列表(分类/验证过滤)

任务 10: 清理旧代码
- 删除 src/web/static/js/core/ 目录(5个文件)
- 删除 src/web/static/js/services/ 目录
- 删除 src/web/static/js/components/ 目录
- 删除 src/web/static/js/pages/ 目录(12个文件)
- 修复 index.html/chat.html/chat_http.html 中对已删除 JS 的引用
2026-04-08 08:25:12 +08:00

44 lines
1.6 KiB
Python

# -*- coding: utf-8 -*-
from sqlalchemy import desc
from src.core.models import ChatSession, Conversation
from src.core.database import db_manager
from .base import BaseRepository
class ChatSessionRepository(BaseRepository):
model_class = ChatSession
def list_sessions(self, tenant_id=None, page=1, per_page=20, status=None, search=None):
with db_manager.get_session() as session:
q = self._base_query(session, tenant_id)
if status:
q = q.filter(ChatSession.status == status)
if search:
from sqlalchemy import or_
q = q.filter(or_(
ChatSession.title.contains(search),
ChatSession.session_id.contains(search)
))
q = q.order_by(desc(ChatSession.updated_at))
total = q.count()
items = q.offset((page - 1) * per_page).limit(per_page).all()
return {
'sessions': [self._to_dict(s) for s in items],
'page': page, 'per_page': per_page,
'total': total, 'total_pages': (total + per_page - 1) // per_page
}
class ConversationRepository(BaseRepository):
model_class = Conversation
def get_by_session_id(self, session_id: str, tenant_id=None):
with db_manager.get_session() as session:
q = self._base_query(session, tenant_id).filter(Conversation.session_id == session_id)
items = q.order_by(Conversation.timestamp).all()
return [self._to_dict(c) for c in items]
chat_session_repo = ChatSessionRepository()
conversation_repo = ConversationRepository()