from flask import jsonify, request from flask_jwt_extended import jwt_required, get_jwt_identity from . import api_bp from ..models import Message, Conversation, Workspace from ..schemas import MessageSchema, MessageCreateSchema from ..services import MessageService message_schema = MessageSchema() message_create_schema = MessageCreateSchema() @api_bp.route("/conversations//messages", methods=["GET"]) @jwt_required() def get_messages(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 messages = ( Message.query.filter_by(conversation_id=conversation_id) .order_by(Message.created_at) .all() ) return jsonify(message_schema.dump(messages, many=True)) @api_bp.route("/conversations//messages", methods=["POST"]) @jwt_required() def create_message(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 = message_create_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: message = MessageService.create_message(conversation_id, data) return jsonify(message_schema.dump(message)), 201 except ValueError as e: return jsonify({"error": str(e)}), 400