diff --git a/modules/routes/api_knowledge.py b/modules/routes/api_knowledge.py new file mode 100644 index 0000000..546ba39 --- /dev/null +++ b/modules/routes/api_knowledge.py @@ -0,0 +1,81 @@ +""" +知识库 API +""" +import uuid +from datetime import datetime +from flask import Blueprint, request, jsonify +from config import KNOWLEDGE_FILE +from utils import load_data, save_data + +knowledge_bp = Blueprint('api_knowledge', __name__) + + +@knowledge_bp.route('/api/knowledge') +def api_knowledge(): + knowledge = load_data(KNOWLEDGE_FILE) + hide_hidden = request.args.get('all', '0') == '0' + if hide_hidden: + knowledge = [k for k in knowledge if k.get('visible', True)] + keyword = request.args.get('q', '').strip().lower() + if keyword: + knowledge = [k for k in knowledge if keyword in k.get('title', '').lower() or + keyword in k.get('content', '').lower()] + category = request.args.get('category', '') + if category: + knowledge = [k for k in knowledge if k.get('category') == category] + return jsonify(sorted(knowledge, key=lambda x: x.get('order', 0))) + + +@knowledge_bp.route('/api/knowledge/') +def api_knowledge_detail(knowledge_id): + knowledge = load_data(KNOWLEDGE_FILE) + item = next((k for k in knowledge if k['id'] == knowledge_id), None) + if not item: + return jsonify({'error': 'Knowledge not found'}), 404 + return jsonify(item) + + +@knowledge_bp.route('/api/knowledge', methods=['POST']) +def api_create_knowledge(): + data = request.get_json() + knowledge = load_data(KNOWLEDGE_FILE) + data['id'] = uuid.uuid4().hex[:12] + data['created_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + data['visible'] = data.get('visible', True) + if 'order' not in data: + data['order'] = len(knowledge) + knowledge.append(data) + save_data(KNOWLEDGE_FILE, knowledge) + return jsonify(data) + + +@knowledge_bp.route('/api/knowledge/', methods=['PUT']) +def api_update_knowledge(knowledge_id): + data = request.get_json() + knowledge = load_data(KNOWLEDGE_FILE) + item = next((k for k in knowledge if k['id'] == knowledge_id), None) + if not item: + return jsonify({'error': 'Knowledge not found'}), 404 + item.update(data) + item['updated_at'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + save_data(KNOWLEDGE_FILE, knowledge) + return jsonify(item) + + +@knowledge_bp.route('/api/knowledge/', methods=['DELETE']) +def api_delete_knowledge(knowledge_id): + knowledge = load_data(KNOWLEDGE_FILE) + knowledge = [k for k in knowledge if k['id'] != knowledge_id] + save_data(KNOWLEDGE_FILE, knowledge) + return jsonify({'success': True}) + + +@knowledge_bp.route('/api/knowledge//visible', methods=['POST']) +def api_toggle_knowledge_visible(knowledge_id): + knowledge = load_data(KNOWLEDGE_FILE) + item = next((k for k in knowledge if k['id'] == knowledge_id), None) + if not item: + return jsonify({'error': 'Knowledge not found'}), 404 + item['visible'] = not item.get('visible', True) + save_data(KNOWLEDGE_FILE, knowledge) + return jsonify({'success': True, 'visible': item['visible']})