from flask import jsonify, request from flask_jwt_extended import jwt_required, get_jwt_identity from . import api_bp from ..models import Conversation, Workspace from ..schemas import ( ConversationSchema, ConversationCreateSchema, ConversationUpdateSchema, ) from ..services import ConversationService conversation_schema = ConversationSchema() conversation_create_schema = ConversationCreateSchema() conversation_update_schema = ConversationUpdateSchema() @api_bp.route("/workspaces//conversations", methods=["GET"]) @jwt_required() def get_conversations(workspace_id): user_id = get_jwt_identity() workspace = Workspace.query.filter_by(id=workspace_id, user_id=user_id).first() if not workspace: return jsonify({"error": "工作空间不存在"}), 404 conversations = Conversation.query.filter_by(workspace_id=workspace_id).all() return jsonify(conversation_schema.dump(conversations, many=True)) @api_bp.route("/workspaces//conversations", methods=["POST"]) @jwt_required() def create_conversation(workspace_id): user_id = get_jwt_identity() workspace = Workspace.query.filter_by(id=workspace_id, user_id=user_id).first() if not workspace: return jsonify({"error": "工作空间不存在"}), 404 data = request.get_json() errors = conversation_create_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: conversation = ConversationService.create_conversation(workspace_id, data) return jsonify(conversation_schema.dump(conversation)), 201 except ValueError as e: return jsonify({"error": str(e)}), 400 @api_bp.route("/conversations/", methods=["GET"]) @jwt_required() def get_conversation(conversation_id): user_id = get_jwt_identity() conversation = Conversation.query.filter_by(id=conversation_id).first() if not conversation: return jsonify({"error": "会话不存在"}), 404 workspace = Workspace.query.filter_by( id=conversation.workspace_id, user_id=user_id ).first() if not workspace: return jsonify({"error": "无权访问此会话"}), 403 return jsonify(conversation_schema.dump(conversation)) @api_bp.route("/conversations/", methods=["PUT"]) @jwt_required() def update_conversation(conversation_id): user_id = get_jwt_identity() conversation = Conversation.query.filter_by(id=conversation_id).first() if not conversation: return jsonify({"error": "会话不存在"}), 404 workspace = Workspace.query.filter_by( id=conversation.workspace_id, user_id=user_id ).first() if not workspace: return jsonify({"error": "无权访问此会话"}), 403 data = request.get_json() errors = conversation_update_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: updated_conversation = ConversationService.update_conversation( conversation, data ) return jsonify(conversation_schema.dump(updated_conversation)) except ValueError as e: return jsonify({"error": str(e)}), 400