Files
assist/src/web/blueprints/conversations.py

91 lines
3.3 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
"""
对话管理蓝图
处理对话相关的API路由
"""
from flask import Blueprint, request, jsonify
from src.core.database import db_manager
from src.core.models import Conversation
from src.core.query_optimizer import query_optimizer
conversations_bp = Blueprint('conversations', __name__, url_prefix='/api/conversations')
@conversations_bp.route('')
def get_conversations():
"""获取对话历史列表(分页)- 优化版"""
try:
page = request.args.get('page', 1, type=int)
per_page = request.args.get('per_page', 10, type=int)
search = request.args.get('search', '')
user_id = request.args.get('user_id', '')
date_filter = request.args.get('date_filter', '')
# 使用优化后的查询
result = query_optimizer.get_conversations_paginated(
page=page, per_page=per_page, search=search,
user_id=user_id, date_filter=date_filter
)
return jsonify(result)
except Exception as e:
return jsonify({"error": str(e)}), 500
@conversations_bp.route('/<int:conversation_id>')
def get_conversation_detail(conversation_id):
"""获取对话详情"""
try:
with db_manager.get_session() as session:
conv = session.query(Conversation).filter(Conversation.id == conversation_id).first()
if not conv:
return jsonify({"error": "对话不存在"}), 404
return jsonify({
'success': True,
'id': conv.id,
'user_id': conv.user_id,
'user_message': conv.user_message,
'assistant_response': conv.assistant_response,
'timestamp': conv.timestamp.isoformat() if conv.timestamp else None,
'response_time': conv.response_time,
'work_order_id': conv.work_order_id
})
except Exception as e:
return jsonify({"error": str(e)}), 500
@conversations_bp.route('/<int:conversation_id>', methods=['DELETE'])
def delete_conversation(conversation_id):
"""删除对话记录"""
try:
with db_manager.get_session() as session:
conv = session.query(Conversation).filter(Conversation.id == conversation_id).first()
if not conv:
return jsonify({"error": "对话不存在"}), 404
session.delete(conv)
session.commit()
# 清除对话历史相关缓存
from src.core.cache_manager import cache_manager
cache_manager.clear() # 清除所有缓存
return jsonify({"success": True, "message": "对话记录已删除"})
except Exception as e:
return jsonify({"error": str(e)}), 500
@conversations_bp.route('/clear', methods=['DELETE'])
def clear_all_conversations():
"""清空所有对话历史"""
try:
with db_manager.get_session() as session:
session.query(Conversation).delete()
session.commit()
# 清除对话历史相关缓存
from src.core.cache_manager import cache_manager
cache_manager.clear() # 清除所有缓存
return jsonify({"success": True, "message": "对话历史已清空"})
except Exception as e:
return jsonify({"error": str(e)}), 500