91 lines
3.3 KiB
Python
91 lines
3.3 KiB
Python
|
|
# -*- 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
|