Files
pit-router/app/routes/sessions.py

103 lines
2.7 KiB
Python
Raw Normal View History

2026-03-14 19:41:36 +08:00
"""
会话路由
"""
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