from flask import jsonify, request from flask_jwt_extended import jwt_required, get_jwt_identity from . import api_bp from ..models import Workspace from ..schemas import WorkspaceSchema, WorkspaceCreateSchema, WorkspaceUpdateSchema from ..services import WorkspaceService workspace_schema = WorkspaceSchema() workspace_create_schema = WorkspaceCreateSchema() workspace_update_schema = WorkspaceUpdateSchema() @api_bp.route("/workspaces", methods=["GET"]) @jwt_required() def get_workspaces(): user_id = get_jwt_identity() workspaces = Workspace.query.filter_by(user_id=user_id).all() return jsonify(workspace_schema.dump(workspaces, many=True)) @api_bp.route("/workspaces", methods=["POST"]) @jwt_required() def create_workspace(): user_id = get_jwt_identity() data = request.get_json() errors = workspace_create_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: workspace = WorkspaceService.create_workspace( user_id, data["name"], data.get("description") ) return jsonify(workspace_schema.dump(workspace)), 201 except ValueError as e: return jsonify({"error": str(e)}), 400 @api_bp.route("/workspaces/", methods=["GET"]) @jwt_required() def get_workspace(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 return jsonify(workspace_schema.dump(workspace)) @api_bp.route("/workspaces/", methods=["PUT"]) @jwt_required() def update_workspace(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 = workspace_update_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: updated_workspace = WorkspaceService.update_workspace(workspace, data) return jsonify(workspace_schema.dump(updated_workspace)) except ValueError as e: return jsonify({"error": str(e)}), 400 @api_bp.route("/workspaces/", methods=["DELETE"]) @jwt_required() def delete_workspace(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 try: WorkspaceService.delete_workspace(workspace) return jsonify({"message": "工作空间已删除"}) except ValueError as e: return jsonify({"error": str(e)}), 400