103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
"""
|
||
会话路由
|
||
"""
|
||
from flask import Blueprint, request, jsonify
|
||
from flask_jwt_extended import jwt_required, get_jwt_identity
|
||
from datetime import datetime
|
||
from app.models import db, Session, Agent
|
||
|
||
sessions_bp = Blueprint('sessions', __name__)
|
||
|
||
|
||
@sessions_bp.route('/', methods=['GET'])
|
||
@jwt_required()
|
||
def get_sessions():
|
||
"""获取会话列表"""
|
||
user_id = get_jwt_identity()
|
||
sessions = Session.query.filter_by(user_id=user_id).all()
|
||
|
||
return jsonify({
|
||
'sessions': [s.to_dict() for s in sessions]
|
||
}), 200
|
||
|
||
|
||
@sessions_bp.route('/', methods=['POST'])
|
||
@jwt_required()
|
||
def create_session():
|
||
"""创建会话"""
|
||
user_id = get_jwt_identity()
|
||
data = request.get_json()
|
||
|
||
title = data.get('title', 'New Session')
|
||
agent_id = data.get('agent_id')
|
||
priority = data.get('priority', 5)
|
||
|
||
# 如果没有指定 Agent,分配一个
|
||
if not agent_id:
|
||
agent = Agent.query.filter_by(status='online').order_by(
|
||
Agent.current_sessions.asc()
|
||
).first()
|
||
if agent:
|
||
agent_id = agent.id
|
||
|
||
session = Session(
|
||
user_id=user_id,
|
||
primary_agent_id=agent_id,
|
||
title=title,
|
||
status='active'
|
||
)
|
||
|
||
db.session.add(session)
|
||
db.session.commit()
|
||
|
||
return jsonify({
|
||
'session': session.to_dict()
|
||
}), 201
|
||
|
||
|
||
@sessions_bp.route('/<session_id>', methods=['GET'])
|
||
@jwt_required()
|
||
def get_session(session_id):
|
||
"""获取会话详情"""
|
||
user_id = get_jwt_identity()
|
||
session = Session.query.filter_by(id=session_id, user_id=user_id).first()
|
||
|
||
if not session:
|
||
return jsonify({'error': 'Session not found'}), 404
|
||
|
||
return jsonify({'session': session.to_dict()}), 200
|
||
|
||
|
||
@sessions_bp.route('/<session_id>/close', methods=['PUT'])
|
||
@jwt_required()
|
||
def close_session(session_id):
|
||
"""关闭会话"""
|
||
user_id = get_jwt_identity()
|
||
session = Session.query.filter_by(id=session_id, user_id=user_id).first()
|
||
|
||
if not session:
|
||
return jsonify({'error': 'Session not found'}), 404
|
||
|
||
session.status = 'closed'
|
||
session.updated_at = datetime.utcnow()
|
||
db.session.commit()
|
||
|
||
return jsonify({'message': 'Session closed', 'session': session.to_dict()}), 200
|
||
|
||
|
||
@sessions_bp.route('/<session_id>/messages', methods=['GET'])
|
||
@jwt_required()
|
||
def get_session_messages(session_id):
|
||
"""获取会话消息"""
|
||
user_id = get_jwt_identity()
|
||
session = Session.query.filter_by(id=session_id, user_id=user_id).first()
|
||
|
||
if not session:
|
||
return jsonify({'error': 'Session not found'}), 404
|
||
|
||
messages = session.messages.order_by('created_at').all()
|
||
|
||
return jsonify({
|
||
'messages': [m.to_dict() for m in messages]
|
||
}), 200
|