83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
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/<int:workspace_id>", 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/<int:workspace_id>", 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/<int:workspace_id>", 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
|