from flask import jsonify, request from flask_jwt_extended import jwt_required, get_jwt_identity from . import api_bp from ..models import Memory, Workspace from ..schemas import MemorySchema, MemoryCreateSchema, MemoryUpdateSchema from ..services import MemoryService memory_schema = MemorySchema() memory_create_schema = MemoryCreateSchema() memory_update_schema = MemoryUpdateSchema() @api_bp.route("/workspaces//memories", methods=["GET"]) @jwt_required() def get_memories(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 memories = Memory.query.filter_by(workspace_id=workspace_id).all() return jsonify(memory_schema.dump(memories, many=True)) @api_bp.route("/workspaces//memories", methods=["POST"]) @jwt_required() def create_memory(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 = memory_create_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: memory = MemoryService.create_memory(workspace_id, data) return jsonify(memory_schema.dump(memory)), 201 except ValueError as e: return jsonify({"error": str(e)}), 400 @api_bp.route("/memories/", methods=["GET"]) @jwt_required() def get_memory(memory_id): memory = Memory.query.get(memory_id) if not memory: return jsonify({"error": "记忆不存在"}), 404 return jsonify(memory_schema.dump(memory)) @api_bp.route("/memories/", methods=["PUT"]) @jwt_required() def update_memory(memory_id): memory = Memory.query.get(memory_id) if not memory: return jsonify({"error": "记忆不存在"}), 404 data = request.get_json() errors = memory_update_schema.validate(data) if errors: return jsonify({"error": errors}), 400 try: updated_memory = MemoryService.update_memory(memory, data) return jsonify(memory_schema.dump(updated_memory)) except ValueError as e: return jsonify({"error": str(e)}), 400 @api_bp.route("/memories/", methods=["DELETE"]) @jwt_required() def delete_memory(memory_id): try: MemoryService.delete_memory(memory_id) return jsonify({"message": "记忆已删除"}) except ValueError as e: return jsonify({"error": str(e)}), 400