Files
sentclaw/backend/app/api/messages.py
T
2026-04-07 16:05:05 +08:00

59 lines
1.9 KiB
Python

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/<int:conversation_id>/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/<int:conversation_id>/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