93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
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/<int:workspace_id>/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/<int:workspace_id>/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/<int:conversation_id>", 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/<int:conversation_id>", 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
|